[FIXED] Binärdatei mithilfe von Extendscript schreiben. Falsche Dateigröße

Ausgabe

Weiter zu meiner Frage hier schreibe ich eine Liste von Hex-Farben in eine Binärdatei aus Photoshop heraus mit Extendscript. So weit, ist es gut.

Nur die mit dem folgenden Code geschriebene Binärdatei ist 119 Byte groß. Beim Ausschneiden und Einfügen und Speichern mit Sublime Text 3 sind es nur 48 Bytes, was später zu Komplikationen führt.

Dies ist mein erstes Mal im binären Land, also bin ich vielleicht etwas verloren. Ich vermute, es handelt sich entweder um ein Codierungsproblem (das die Dateigröße von 2,5 erklären könnte) oder um etwas sehr Falsches beim Versuch, die Datei wörtlich, Zeichen für Zeichen neu zu erstellen. *

// 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);

* …oder es ist das Tracking auf meiner VHS.

Lösung

Ich bin Müll in JavaScript, aber ich habe etwas zusammen gehackt, das Ihnen zeigt, wie Sie 3 Bytes Hex in eine Datei in Binärform schreiben. Ich hoffe, es reicht Ihnen, herauszufinden, wie Sie den Rest erledigen!

Ich habe diese Datei gespeichert als/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");

Wenn Sie das data.binausgeben, sehen Sie 3 Bytes:

xxd data.bin
00000000: 1a2b 3c

Sie können mehr Ihrer Werte schreiben, indem Sie einfach die Zeichenfolge ändern in:

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

Ich habe auch herausgefunden, wie man ExtendScript von einem Shell-Skript in Terminal ausführt, das mein “glücklicher Ort” ist , also füge ich das hier für meine eigene Referenz hinzu:

#!/bin/bash

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

Der entsprechende Leseteil dieser Antwort ist hier .


Beantwortet von –
Mark Setchell


Antwort geprüft von –
Marie Seifert (FixError Admin)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like