【projectItemRenamer.jsx】作業準備 10【開発記】
今回の概略
画像を文字列に変換するコード、節々に罠が仕込まれてるの巻😑
#jsx #開発記
#ExtendScript #AfterEffects
前回の粗筋
画質をワイヤーフレームにするのはタイムラインのスイッチではできなかったけどメニューには有る😑
調査
じゃ、今度こそ埋込みの試験をば…🤤
大まかに
という手順で文字列にしたら埋込みが可能になるって寸法🤤
↑の記事では toSource() が簡単だし分かりやすいし文字数が少ないのでオススメとあるけど実はここに罠が😑
toSource() が使えない😞
(というか保証されない)
これはエクスプレッションについてなのでエンジンを ExtendScript にしていたり JavaScript で駆動しない、ファイル呼び出し方式になってる jsx には関係がない話なんだけど、いつなんどき ES が最新の ECMAScript で駆動するようになるか分からないので安全の為に今回は charCodeAt() を使おうかしらね🤤
// https://uske-s.hatenablog.com/entry/2020/07/02/210027
// コードポイントとして落とし込む
// ファイルをBINARYで読み出し
var f = File("~/Desktop/icon.png"); //適宜ファイルパスを渡す
f.open("r");
f.encoding = "binary";
var res = f.read();
f.close();
// コードポイントとして落とし込む
var src = res.split("");
for (var i=0,len=src.length; i<len; i++) {
src[i] = src[i].charCodeAt(0);
}
src = src.join(",");
// テキストファイルなどに書き出し
var txt = File("~/Desktop/img.txt");
txt.open("w");
txt.write(src);
txt.close();
// 画像データとして復号
var w = new Window("dialog");
w.add("image", undefined, String( String.fromCharCode(src) ));
w.show();
………
これ、 fromCharCode(src) のとこ、 src は `String.fromCharCode("65,66,67")` みたいな値になってるって事よね?🤔
複合できるのこれ?😑
String.fromCharCode(65, 66, 67); // "ABC" を返す
String.fromCharCode(0x2014); // "—" を返す
String.fromCharCode(0x12014); // これも "—" を返す。1 の桁は削除され無視される
String.fromCharCode(8212); // これも "—" を返す。8212 は 0x2014 の 10 進数形
String.fromCharCode(0xd83c, 0xdf03); // Code Point U+1F303 "Night with
String.fromCharCode(55356, 57091); // Stars" === "\uD83C\uDF03"
String.fromCharCode(0xd834, 0xdf06, 0x61, 0xd834, 0xdf07); // "\uD834\uDF06a\uD834\uDF07"
Firefox でもコンソールでも駄目じゃん😞
まぁ…なんとなく解ってたけど🙄
どうやら join() で文字列化はテキストファイルに保存する時以外では使わない方が良さそうかな🤔
大きな画像を変換する時はコンソールだと追いつかないからファイルに書き出して配列としてコードにペーストする、という方式が良さそう😑
↑の記事を鵜呑みにして作るとハマるっぽ😞
次回は
今度こそ変換するぽ🙄