+// Convert any file to binary string.
+// By Tomas Sinkunas. www.rendertom.com
+// Select some files and they will be converted to binary string. The output files will be saved to same location as original files, but will have .txt extension.
+ scriptBuildUI(thisObj);
+ function scriptBuildUI(thisObj) {
+ var typeOfWindow = getTypeOfWindow();
+ var win = (thisObj instanceof Panel) ? thisObj : new Window(typeOfWindow, "Export To Binary", undefined, {
+ win.alignChildren = ["fill", "fill"];
+ var checkOneFile = win.add("checkbox", undefined, "Write everything to one file");
+ checkOneFile.value = options.oneFile;
+ var checkAddRes = win.add("checkbox", undefined, "Add \"Create File\" option");
+ checkAddRes.value = options.addRes;
+ var btnConvert = win.add("button", undefined, "Export To Binary");
+ btnConvert.onClick = function () {
+ options.oneFile = checkOneFile.value;
+ options.addRes = checkAddRes.value;
+ win.onResizing = win.onResize = function () {
+ if (win instanceof Window) {
+ win.layout.layout(true);
+ var sourceFiles = File.openDialog("Select files to with to export to binary", undefined, {
+ if (!sourceFiles) return;
+ var binaryStringsArray = [],
+ resourceStringsArray = [],
+ if (options.oneFile === true) {
+ for (i = 0, il = sourceFiles.length; i < il; i++) {
+ displayName = File(sourceFiles[i]).displayName;
+ fileName = displayName.split(".")[0];
+ extension = displayName.split(".")[1];
+ variableName = toVariableName(fileName);
+ binaryString = "var " + variableName + "_bin = " + convertToBinary(sourceFiles[i]);
+ resourceString = "var " + variableName + " = createResourceFile (\"" + fileName + "." + extension + "\", " + variableName + "_bin, userDataFolder);";
+ binaryStringsArray.push(binaryString);
+ resourceStringsArray.push(resourceString);
+ finalString = buildString(binaryStringsArray, resourceStringsArray);
+ saveFile(File.decode(sourceFiles[0].path) + "/ALL.txt", finalString);
+ for (i = 0, il = sourceFiles.length; i < il; i++) {
+ binaryString = convertToBinary(sourceFiles[i]);
+ saveFile(sourceFiles[i].fsName + ".txt", binaryString);
+ alert(e.toString() + "\nLine: " + e.line.toString());
+ function buildString(binaryStringsArray, resourceStringsArray) {
+ var finalString = binaryStringsArray.join("\n");
+ if (options.addRes === true) {
+ finalString += "\n\n\nvar userDataFolder = \"~/Desktop/\";\n";
+ finalString += resourceStringsArray.join("\n") + "\n\n";
+ finalString += "function createResourceFile(filename, binaryString, resourceFolder) {\n" +
+ "\tvar fileObject = new File(resourceFolder + \"/\" + filename);\n" +
+ "\tif (!File(fileObject).exists) {\n" +
+ "\t\tfileObject.encoding = \"BINARY\";\n" +
+ "\t\tfileObject.open(\"w\");\n" +
+ "\t\tfileObject.write(binaryString);\n" +
+ "\t\tfileObject.close();\n" +
+ "\treturn fileObject;\n" +
+ function toVariableName(string) {
+ // remove non A-Z from beginning
+ varName = varName.replace(/[^A-Za-z]*/, "");
+ if (varName.length === 0) {
+ varName = "undef_" + string;
+ // capitalise first letters of the word;
+ varName = varName.replace(/\w\S*/g, function (txt) {
+ return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
+ // remove white spaces;
+ varName = varName.replace(/\s+/g, "");
+ // lowercase first letter;
+ varName = varName.charAt(0).toLowerCase() + varName.substr(1);
+ function convertToBinary(fileObj, appendix) {
+ var fileContent = readFileContent(fileObj, "BINARY");
+ var binaryString = fileContent.toSource();
+ binaryString = binaryString.replace(/^\(new String\(/, "");
+ binaryString = binaryString.replace(/\)\)$/, ";");
+ function getTypeOfWindow() {
+ var isAfterEffects = function () {
+ return BridgeTalk.appName.toLowerCase().match("aftereffects");
+ return isAfterEffects() ? "palette" : "dialog";
+ function saveFile(filePath, fileContents, encoding) {
+ var fileObject = new File(filePath);
+ encoding = encoding || "UTF-8";
+ fileObject.encoding = encoding;
+ fileObject.write(fileContents);
+ function readFileContent(fileObj, encoding) {
+ encoding = encoding || "UTF-8";
+ fileObj.encoding = encoding;
+ var fileContent = fileObj.read();