首页 > 解决方案 > 使用 Extendscript 编写二进制文件。文件大小不正确

问题描述

除了我的问题我正在使用 Extendscript 从 Photoshop 中将十六进制颜色列表写入二进制文件。到目前为止,一切都很好。

只有用以下代码编写的二进制文件是 119 字节。使用 Sublime Text 3 剪切、粘贴和保存时,它只有 48 个字节,这会在以后导致复杂性。

这是我第一次进入二进制领域,所以我可能有点迷茫。我怀疑这要么是一个编码问题(这可以解释 2.5 文件大小),要么是在尝试以文字、字符为字符的意义重新创建文件时做了一些非常错误的事情。*

// Initially, my data is a an array of strings
var myArray = [
"1a2b3c",
"4d5e6f",
"a10000",
"700000",
"d10101",
"dc0202",
"c30202",
"de0b0b",
"d91515",
"f06060",
"fbbaba",
"ffeeee",
"303030",
"000000",
"000000",
"000000"
]

// I then separate them to four character chunks
// in groups of 8
var data = "1a2b 3c4d 5e6f a100 0070 0000 d101 01dc\n" + 
"0202 c302 02de 0b0b d915 15f0 6060 fbba\n" +
"baff eeee 3030 3000 0000 0000 0000 0000";

var afile = "D:\\temp\\bin.act"

var f = new File(afile);
f.encoding = "BINARY";
f.open ("w");
// f.write(data);

// amended code
for (var i = 0; i < data.length; i++)
{
   var bytes = String.fromCharCode(data.charCodeAt(i));
   f.write(bytes);   
}

f.close();
alert("Written " + afile);

* ...或者它是我的 VHS 上的跟踪。

标签: binaryfilesphotoshopfilesizeextendscriptphotoshop-script

解决方案


我在 JavaScript 上很垃圾,但我已经一起破解了一些东西,它将向您展示如何将 3 个字节的十六进制写入二进制文件。我希望这足以让你弄清楚如何做剩下的事情!

我将此文件保存为/Users/mark/StackOverflow/AdobeJavascript.jsx

alert("Starting");

// Open binary file
var afile = "/Users/mark/StackOverflow/data.bin"
var f = new File(afile);
f.encoding = "BINARY";
f.open ("w");

// Define hex string
str = "1a2b3c"
for(offset=0;offset<str.length;offset+=2) {
   i = parseInt(str.substring(offset, offset+2), 16)
   f.write(String.fromCharCode(i));
}

f.close();
alert("Done");

如果你转储data.bin你会看到 3 个字节:

xxd data.bin
00000000: 1a2b 3c

您可以通过简单地将字符串更改为:

str = "1a2b3c"+ "4d5e6f"+ "a10000";

我还发现了如何从终端中的 shell 脚本运行 ExtendScript,这是我的“快乐之地”,所以我将在此处添加它以供我自己参考:

#!/bin/bash

osascript << EOF
tell application "Adobe Photoshop CC 2019"
    do javascript "#include /Users/mark/StackOverflow/AdobeJavascript.jsx"
end tell
EOF

这个答案的相应阅读部分在这里


推荐阅读