終了

Base64 文字列から Image を作成できませんか?

New Here ,
Nov 24, 2021 Nov 24, 2021

リンクをクリップボードにコピー

コピー完了

InDesign のスクリプトで、image.place("画像ファイル名") で image オブジェクトを作成できることは承知していますが、
Base64 文字列化された画像情報から image オブジェクトを作りたいと思っています。
ネット検索はしてみましたが分からないので、ご助言頂ければ嬉しいです。

キーワード
スクリプティング

表示

329

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Nov 25, 2021 Nov 25, 2021

リンクをクリップボードにコピー

コピー完了

Base64はバイナリデータのASCII化ですからまずはデコードして本来のバイナリデータを取得する必要があります。

 

function decB64(str) {
	var e = {};
	var i,k;
	var v = new Array();
	var r = '';
	var w = String.fromCharCode;
	var n = [[65,91],[97,123],[48,58],[43,44],[47,48]];

	for (z in n){
		for(i=n[z][0];i<n[z][1];i++){
			v.push(w(i));
			}
		}
	for(i=0;i<64;i++) e[v[i]]=i;
	for(i=0;i<str.length;i+=72){
		var b=0,c,x,l=0,o=str.substring(i,i+72);
         for(x=0;x<o.length;x++){
			c = e[o.charAt(x)];
			b = (b << 6) + c;
			l += 6;
			while(l>=8) r += w((b >>> (l -= 8)) % 256);
			}
		}
	return r;
	}

 

Base64文字列をこのような処理でバイナリに戻しファイルとして書き出します。書き出されたデータはオリジナルの画像データとなりますからそれをInDesignに配置処理すればよいでしょう。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
New Here ,
Nov 25, 2021 Nov 25, 2021

リンクをクリップボードにコピー

コピー完了

やはり、ファイルに書き出してから、それを InDesigen のスクリプトで読み込むしかない、ということですね。
idml に埋め込まれた画像は Base64 なので、ファイルに書き出すことなく、直接渡せるといいなと思ったのですが。
ありがとうございました。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Nov 25, 2021 Nov 25, 2021

リンクをクリップボードにコピー

コピー完了

一回デコードしてみればわかることですが、IDMLに埋め込まれた状態の画像のBase64部分というのはオリジナルの画像データそのものです。これをマークアップしてパースしドキュメント上のインスタンスとするのがIDMLの処理になります。
IDMLはドキュメントを構築するための構造ですからJavaScriptのDOMとは異なります。IDMLを手動でパースする事は可能ですが、IDMLに従ってDOM上でトレースする形になり直接インスタンスを抜き出すのではありません。

 

https://wwwimages.adobe.com/content/dam/acom/en/devnet/indesign/sdk/cs6/idml/idml-specification.pdf

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
New Here ,
Nov 25, 2021 Nov 25, 2021

リンクをクリップボードにコピー

コピー完了

最新

ご丁寧な回答、ありがとうございます。
place() の代わりのような関数で、ファイル名でなく、Base64文字列(バイナリ化したもの)で、image オブジェクトを作る方法を知りたい、というのが質問の趣旨でした。
もちろん、idml を直接いじるつもりはなく、InDesign に用意さえれいる Script でです。
そのようなものはない、ということを承知しました。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines