見出し画像

【projectItemRenamer.jsx】作業準備 10【開発記】


今回の概略

画像を文字列に変換するコード、節々に罠が仕込まれてるの巻😑

#jsx #開発記
#ExtendScript #AfterEffects

作業準備 ←今ココ
ラベル対応
第2層改装
ローカライズ対応
OTSParser 改
総合試験
最終調整
公開準備

----備忘録
ラベルカラー対応
カメラやライトレイヤー
他の未対応第2層スイッチ
第2層ラジオボタン化
ローカライズテキスト対応?
ローカライズの書式を一般的な物に修正したい
OTSParser 改
OTSPElement の property の幾つかが [PNAME.????] になってるので直値にする
 全部やる必要は無いけど nodeValue とかは直の名前なので統一するという意図

追加ができたら順次実装だけど順番?に
「結果一覧 CSV 」
「ラベル対応」(第1層,第2層)
「第2層改装」
かな🤔
新機能用に第2層の UI を変更するのはこれらの処理の中でやる事になるぽ🤤
特にチェックボックスだったのをラジオボタンにする部分は先にやるとデバグがめんどい😞

ラベルカラー❎ →直値
アプリ内アイコン❎ →極一部以外不明
画像埋込
高解像度画面の判別


前回の粗筋

画質をワイヤーフレームにするのはタイムラインのスイッチではできなかったけどメニューには有る😑



調査

じゃ、今度こそ埋込みの試験をば…🤤

SUIに画像を埋め込む方法
https://uske-s.hatenablog.com/entry/2020/07/02/210027

大まかに

バイナリでファイルを読み込む
charCodeAt() や toSource() で文字列にする
文字列になったデータを String(String.fromCharCode(src)) とか File.decode(src) でバイナリに戻す

という手順で文字列にしたら埋込みが可能になるって寸法🤤
↑の記事では toSource() が簡単だし分かりやすいし文字数が少ないのでオススメとあるけど実はここに罠が😑

エクスプレッションエンジン間の構文の違い
https://helpx.adobe.com/jp/after-effects/using/legacy-and-extend-script-engine.html

...reflect.properties、...reflect.methods および toSource() のサポートなし
JavaScript の toSource() は廃止され、標準化過程には含まれません。

toSource() が使えない😞
(というか保証されない)
これはエクスプレッションについてなのでエンジンを ExtendScript にしていたり JavaScript で駆動しない、ファイル呼び出し方式になってる jsx には関係がない話なんだけど、いつなんどき ESExtendScript が最新の 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()
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode

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() で文字列化はテキストファイルに保存する時以外では使わない方が良さそうかな🤔
大きな画像を変換する時はコンソールだと追いつかないからファイルに書き出して配列としてコードにペーストする、という方式が良さそう😑
↑の記事を鵜呑みにして作るとハマるっぽ😞


次回は

今度こそ変換するぽ🙄

この記事が気に入ったらサポートをしてみませんか?