批量转换图像为二进制字符串

时间:2013-02-26 11:17:39

标签: image encoding binary adobe extendscript

我正在尝试将图像批量转换为二进制字符串,以便在Adobe ExtendScript面板中使用。我想得到的结果是一个看起来像这样的字符串:

\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x0F\x00\x00\x00\x0F\b\x06\x00\x00\x00;\u00D6\u0095J\x00\x00\x00IIDAT(\u0091c`\x18~ --\u00ED?\x0E\u00BC\u009F\x18\u00CD\r8p\x026\u00C5\x06@\u00EC@\x046 \u00C5\u0099\u0084\u009D\r\x14,\u00C0\u00E3T\u00FC\u00CE&\u00C1\x10\u00BC\u009AIw6\u0092f\u00D2\x02\f\u00E4\x14\"\u00FD\u008B\u00E9l\u0090S(\nm\u00BA\x02\x00\u009Dp\u00B2N\u00F1d\x1D\u00FD\x00\x00\x00\x00IEND\u00AEB`\u0082

但是我的代码生成了这个:

c289 504e 470d 1a0d 0000 000d 4948 4452
0000 000f 0000 000f 0806 0000 003b c396
c295 4a00 0000 4949 4441 5428 c291 6360
187e 202d 2dc3 ad3f 0ec2 bcc2 9f18 c38d
0d38 7002 36c3 8506 40c3 ac40 0436 20c3
85c2 99c2 84c2 9d0d 142c c380 c3a3 54c3
bcc3 8e26 c381 10c2 bcc2 9a49 7736 c292
66c3 9202 0cc3 a414 22c3 bdc2 8bc3 a96c
c290 5328 0d6d c2ba 0200 c29d 70c2 b24e
c3b1 641d c3bd 0000 0000 4945 4e44 c2ae
4260 c282

我需要做些什么来获得像第一个字符串一样的东西?这是我的代码(adobe extendscript)。如果某人有不同语言的解决方案,我也会接受。

var allImages = loadFiles("*.png");// load files is my own function

if(allImages == null) return;
var folder = allImages[0].parent;
for(var i = 0; i < allImages.length;i++){
        var curfile = File (allImages[i]);

        curfile.open ('r');
        curfile.encoding = 'BINARY';
        var str = curfile.read();
        curfile.close();

        var newfile = new File (folder.fsName + '/' + curfile.name + '.txt');
        newfile.open('w');
        newfile.encoding = 'UTF-8';
        newfile.write(str);
        newfile.close();
    } // end loop i 

2 个答案:

答案 0 :(得分:1)

也许您应该将图像转换为Base64。

这里有关于该选项的stackoverflow的两个线程。我发现第二个答案更有趣。

How can you encode to Base64 using Javascript?

JSON encode/decode base64 encode/decode in JavaScript

答案 1 :(得分:0)

我只需要将文件内容写入Source()。

var allImages = loadFiles("*.png");// load files is my own function

if(allImages == null) return;
var folder = allImages[0].parent;
for(var i = 0; i < allImages.length;i++){
    var curfile = File (allImages[i]);

    curfile.open ('r');
    curfile.encoding = 'BINARY';
    var str = curfile.read();
    curfile.close();

    var newfile = new File (folder.fsName + '/' + curfile.name + '.txt');
    newfile.open('w');
    newfile.encoding = 'UTF-8';
    newfile.write(str.Source()); // <-- Thats the trick
    newfile.close();
} // end loop i  

这将生成包含此内容的文件。

(new String("\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x1E\x00\x00\x00\x19\b\x06\x00\x00\x00&5\u009E\x1A\x00\x00\x00\u008DIDATx\u00DA\u00ED\u00D2\u00BB\r\u00C0 \fE\u00D1\f\u00C9\x00\u00B4H\u00F44\x14)\u00A0\u00A0\u00A1c\x00f`@Go\x01>r$+\u0091\u008B\u00DB\u00D9\x1C\u00C5\u00CA\u00E5\u009C\u00BB%\x02L\x12)\u00AC\u00B0<\\J\u00A11\u00C6,\u00CC\u0088\u00C1?8u\u00CE\u0099j\u00AD'a\u0087\x0F\u00F7\u00DEq\u00C6\u0093\u00B0\u00C3\u0087C\b\x14c<\t;k\u00D8\x18C;Yk\u00C9{?\r3\u009B\u00EF\u00ED\u00C3)\u00A5\u00D5\u00891\u00F3:\u008C/\u00C2\u00C3\u00B30\u00C3\u0084\u00F9\u00F1\u00E1\u00D6\u00DA\u00E9_\u008D\u009D\u00AF\u00C1\u00FC\x14VX\x0E~\x00i\u0096r%\u00B0\u00FF\x1E\x14\x00\x00\x00\x00IEND\u00AEB`\u0082"))