在 Extendscript 中使用编写二进制文件。文件大小不正确
Writing binary file using in Extendscript. Incorrect file size
关于我的问题 here 我正在使用 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 上的跟踪。
我在 JavaScript 很垃圾,但我一起破解了一些东西,它将向您展示如何将 3 个字节的十六进制写入二进制文件。我希望这足以让您了解如何完成剩下的工作!
我将此文件另存为 /Users/mark/Whosebug/AdobeJavascript.jsx
alert("Starting");
// Open binary file
var afile = "/Users/mark/Whosebug/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/Whosebug/AdobeJavascript.jsx"
end tell
EOF
这个答案对应的阅读部分是here。
关于我的问题 here 我正在使用 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 上的跟踪。
我在 JavaScript 很垃圾,但我一起破解了一些东西,它将向您展示如何将 3 个字节的十六进制写入二进制文件。我希望这足以让您了解如何完成剩下的工作!
我将此文件另存为 /Users/mark/Whosebug/AdobeJavascript.jsx
alert("Starting");
// Open binary file
var afile = "/Users/mark/Whosebug/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/Whosebug/AdobeJavascript.jsx"
end tell
EOF
这个答案对应的阅读部分是here。