スポンサーサイト

Tags :
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

選択したフォルダにある配置画像をマークで示すIllustrator用JavaScript

Illustratorドキュメントに配置されている画像が、『あるべきフォルダ』の中の物かどうかを一目でチェックするためのJavaScript。

ちょっと前のDTP駆け込み寺の掲示板の投稿
イラストレーターcs2での画像リンク
にもありましたが、Illustratorドキュメントを違う環境で開き直した時に、別の場所にある同名ファイルにリンクしてしまってないかチェックするのに使えるんじゃないでしょうか。

こんな感じのドキュメントで


スクリプトを実行すると、『配置された画像があるべきフォルダ』を選択するダイアログが表示されるので、対象のフォルダを選択します。


実行後、『選択したフォルダの中にある画像』が赤の■でマークされ、画像点数の情報を表示します。画像がマークより小さい場合は、画像のサイズに合わせてマークが小さくなります。『ユニークファイル数』は一つの画像を複数箇所に配置している場合に、実際のファイルの数のみをカウントした数値です。


これらの表示は『***画像マーク用』レイヤに作成されるので、チェックが終わったら削除してください。


■注意点
画像の一部をマスクしている場合にも、■マークはマスクではなく画像の中心に表示されます。
ネットワーク越しのフォルダを選択した場合、場所の表示は『/ボリューム名』から始まる形で表示されます。
ブラウザの環境等でスクリプト中に『円マーク』が見えている場合は『バックスラッシュ』に置換してから使用してください。

■動作確認
MacOSX 10.5.6
IllustratorCS4
#target Illustrator

function markImagesInSpecifiedFolder() {
	var doc = activeDocument;
	var images = doc.placedItems;
	var tgtPath = Folder.selectDialog ('選択したフォルダ内にある配置画像を■で表示します。');
	var L = doc.layers;
	var lName = '***画像マーク用';
	var rectSize = 50; //■マークのサイズ(pt)
	var rectMinSize = 25; //■マークの最小サイズ(pt)
	var sn1 = 'myResult1';
	var imgPathStrs = []; //配置された全ての画像ファイルのパスを格納
	var tgtImgPathStrs = []; //配置された画像の内、選択したフォルダにあるファイルのパスを格納
	var lostImgs = []; //リンク切れ画像を格納

	var ro = doc.rulerOrigin;
	doc.rulerOrigin = [0, 0];

	for (var i=0; i<L.length; i++) {
		if (L[i].name == lName) { L[i].remove(); }
	}

	var colors = {
		'magenta': setCmyk(0, 100, 0, 0),
		'white': setCmyk(0, 0, 0, 0),
		'nc': new NoColor()
		}

	var charStyles = doc.characterStyles;
	for (var i=0; i<charStyles.length; i++) {
		if (charStyles[i].name == sn1) { charStyles[i].remove(); }
	}

	//結果表示テキストのスタイルを設定
	var resultStyle = doc.characterStyles.add(sn1);
	var resultAttr = resultStyle.characterAttributes;
	resultAttr.size = 14;
	resultAttr.fillColor = colors.magenta;
	resultAttr.autoLeading = false; //行間を設定する場合はfalseにする
	resultAttr.leading = 22;

	var mkLayer = doc.layers.add();
	mkLayer.name = lName;

	//ドキュメント全体を半調にする為の矩形を作成
	var baseRect = mkLayer.pathItems.rectangle(doc.height + 10, -10, doc.width + 20, doc.height + 20);
	baseRect.fillColor = colors.white;
	baseRect.strokeColor = colors.magenta;
	baseRect.strokeWidth = 10;
	baseRect.opacity = 80;

	//全ての配置画像をチェックして行く
	var iLength = images.length;
	for (var i=0; i<iLength; i++) {
		var img = images[i];
		//リンク切れ対策
		try {
			var imgPath = img.file.parent.toString();
			imgPathStrs.push(img.file.toString());
		} catch(e) {
			var imgPath = '';
			lostImgs.push(img);
		}
		if (imgPath == tgtPath) {
			var rs = rectSize; //マークのサイズを初期値に
			tgtImgPathStrs.push(img.file.toString());
			//画像をマークする矩形を作成
			var w = img.width;
			var h = img.height;
			rs = Math.min(Math.min(rs, w), h);
			rs = Math.max(rs, rectMinSize);
			var ofst = rs / 2;
			var mkRect = mkLayer.pathItems.rectangle((img.top - h / 2) + ofst, (img.left + w / 2) - ofst, rs, rs);
			mkRect.fillColor = colors.magenta;
			mkRect.strokeColor = colors.nc;
			mkRect.strokeWidth = 0;
			mkRect.opacity = 80;
		}
	}

	//結果の文字を表示
	var lostMes = (lostImgs.length > 0) ? ' リンク切れ : ' + lostImgs.length + '点' : '';
	var mes = decodeURI(tgtPath) + '\r' + ' にある配置画像を■で表示しています' + '\r\r' +
			'配置画像の総数 : ' + images.length + '点 ' + lostMes + '\r' +
			decodeURI(tgtPath) + ' からの配置 : ' + tgtImgPathStrs.length + '点' + '(ユニークファイル数 : ' + uniqArr(tgtImgPathStrs).length + '点)';
	var result = mkLayer.textFrames.add();
	result.contents = mes;
	result.position = [0, doc.height + 140];
	result.characters.fillColor = colors.magenta;
	resultStyle.applyTo(result.textRange);

	doc.rulerOrigin = ro;
}

//CMYKカラー作成
function setCmyk(c, m, y, k) {
	col = new CMYKColor();
	col.cyan = c;
	col.magenta = m;
	col.yellow = y;
	col.black = k;
	return col;
};

//配列の値をユニークに(数値・文字列のみ可)
function uniqArr(arr) {
	var retArr = [];
	arr.sort();
	for (var i=0; i<arr.length; i++) {
		if (retArr[retArr.length-1] != arr[i]) { retArr.push(arr[i]); }
	}
	return retArr;
}

if (app.documents.length == 0) {
	alert('ドキュメントが開かれていません。');
} else {
	markImagesInSpecifiedFolder();
}
関連記事
スポンサーサイト

コメント

非公開コメント

Profile
choco
Author : choco

印刷・製版の現場を経て、広告制作会社でPhotoshopを使ったビジュアル制作を担当。

→現在は車載機器開発ベンダにて、組み込み3Dデータ作成やUIデザインなどを行っています。

Categories
Favorites


Search
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。