スポンサーサイト

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

InDesignで配置した画像を更新された日時によって色分けハイライトするJavaScript

ちょっと前に書いたInDesign用JavaScript。(CS2以前のパージョンでは正常に動作しないと思います。)

印刷会社の製版部門では、色校正が戻ってきて訂正指示の入った写真の色補正を行った後、修正した画像をInDesignで再配置して再校出力ってことが日常的にありますが、そのチェック作業に使えるInDesign用JavaScript。

作業時、訂正する画像が数点ならそれほど問題無いですが、数十ページに渡って直しが何十点もある場合には、貼り替え忘れ等の確認作業に結構神経使うと思います。検版作業はまた別の事として、製版作業の段階でのミスを軽減するアシスト用と言う事で。

このスクリプトは、ドキュメントに配置されている画像の更新日時をチェックし、指定した時間以内にPhotoshop等で変更、保存された画像であればブルーの枠でハイライト表示するので、その画像ファイルが最近変更されたものかどうかが一目で分かります。(表示されるのはInDesignでの配置日時に関係なく、画像ファイルそのものの更新日時によるものです)

チェックするドキュメントを開いた状態でスクリプトを実行するとダイアログが表示されるので、何時間以内に変更・保存された画像をブルーの枠でハイライトするのか入力します。







色分けの内容は次の通り

ブルー…ダイアログに入力した時間以内にPhotoshop等で変更されている画像(デフォルトは8時間に設定してあります)
イエロー…設定した時間よりも保存された日時が古い画像
レッド…リンク切れ等で保存された日時を取得出来ない画像(変更日時がNaNで返される)

ハイライトの枠の色がやや透けているのは、同じ場所で重なっている画像(部分キリヌキの画像など)を判別しやすくするためです。

ハイライトの枠は 『***画像ハイライト用』という名前のレイヤーを新たに作成して、そこに描画していくようになっているので、チェックが終わったら捨ててください。


現状の仕様では全ページに渡ってチェックしていくので(ページパレットで選択されたページの取得方法が分からなかった…ダイアログで入力するようにしても良いんですが)、画像を大量に配置していると結構時間がかかるかも知れません。まあ自分の経験では、ページ物でも大抵いくつかのファイルに分かれているので何百ページも一度に処理してしまう事はそうないとは思いますが。

■動作確認
Mac OS X 10.5.6
InDesign CS4
#target InDesign

if (app.documents.length == 0) {
	alert('ドキュメントが開かれていません。');
	exit();
} else {
	var doc = app.activeDocument;
}

var now = new Date();
var boundaryTime = showDialog();
var myLayerName = '***画像ハイライト用'; //新たに作るハイライト用レイヤの名前
var L = doc.layers;
for (var i=0; i<L.length; i++) {
	if (L[i].name == myLayerName) {
		if (confirm('既にハイライト用のレイヤがあります。処理を続けますか?') == false) { exit(); }
		L[i].remove();
	}
}
var myLayer = doc.layers.add({name: myLayerName}); //ハイライト用レイヤ作成
var myColors = {
	'red': setCmyk([0, 100, 100, 0]),
	'cyan': setCmyk([100, 0, 0, 0]),
	'yellow': setCmyk([0, 0, 100, 0]),
	'white': setCmyk([0, 0, 0, 0])
	} 

//ドキュメントの全ページを処理していく
for (var i=0; i<doc.pages.length; i++) {
	var p = doc.pages[i]
	var tf = p.textFrames.add({
		geometricBounds: p.bounds,
		fillColor: myColors['white']
		});
	tf.transparencySettings.blendingSettings.opacity = 70;
	var G = p.allGraphics;
	for (var j=0; j<G.length; j++) {
		var f = new File(G[j].itemLink.filePath);
		var md = Date.parse(f.modified);
		
		//画像の更新日時が設定した時間(boundaryTime)以内ならシアンの枠を描画
		//リンク切れなどで判別不可(更新日時がNaN)の場合はレッドに
		//それ以外はイエロー
		var sc = '';
		(!md) ? sc = myColors['red']
			: (((now - md) > boundaryTime*1000) ? sc = myColors['yellow'] : sc = myColors['cyan']);
			
		//画像の枠を描画
		var hl = G[j].parent.duplicate(myLayer);
		hl.graphics[0].remove();
		hl.fillColor = doc.swatches.item(0, 0, 0, 0);
		hl.strokeColor = sc;
		hl.strokeWeight = '5mm';
		hl.transparencySettings.blendingSettings.opacity = 60;
	}
}

alert('終了しました');
exit();


//CMYKカラーを作成(既に同じ色のカラーがある場合はそちらを使用)
function setCmyk(cv) {
	var cn = 'C=' + cv[0] + ' M=' + cv[1] + ' Y=' + cv[2] + ' K=' + cv[3];
	for (var i=0; i<doc.colors.length; i++) {
		var sw = doc.colors[i];
		var c = sw.colorValue;
		//forループで処理できない?
		if ((sw.name == cn) && (cv[0] == c[0]) && (cv[1] == c[1]) && (cv[2] == c[2]) && (cv[3] == c[3])) { return sw; }
	}
	return doc.colors.add({
		name: cn,
		model: ColorModel.process,
		space: ColorSpace.cmyk,
		colorValue: cv
	});
}


//時間入力用ダイアログ表示
function showDialog() {
	var myDialog = app.dialogs.add({name:"時間を入力してください",canCancel: true}); 
	with(myDialog){ 
		with(dialogColumns.add()) {
			with(borderPanels.add()) {
				staticTexts.add({staticLabel: '変更・保存されてから'});
				var myHoursField = integerEditboxes.add({editValue: 8, minWidth: 20});
				staticTexts.add({staticLabel: '時間'}); 
				var myMinutesField = integerEditboxes.add({editValue: 0, minWidth: 20});
				staticTexts.add({staticLabel: '分以内の画像をブルーの枠でハイライトします'});
			}
		}
	} 
	var myResult = myDialog.show(); 
	if(myResult == true) {
		var myBoundarySec = myHoursField.editValue * 3600 + myMinutesField.editValue * 60;
		myDialog.destroy(); 
		return (myBoundarySec);
	} 
	else{ 
		myDialog.destroy();
		exit();
	} 
}
関連記事
スポンサーサイト

コメント

非公開コメント

Profile
choco
Author : choco

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

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

Categories
Favorites


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