スポンサーサイト

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

AppleScript & Photoshopで2つの画像の差異がある部分を着色表示する

久しぶりの更新になります。

AppleScriptを使って、Photoshopで表示している2つの画像の差異がある部分(値が同じでないピクセル)を、着色表示してみます。印刷会社などで導入されている『デジタル検版』の様な感じで表示します。

やっている事は、

・下準備として画像がレイヤを持っている場合はそれを統合して一枚モノの画像にしておき
・2つの画像をレイヤで重ね
・画像モードを『16bit/チャンネルのRGB』に変換
・上のレイヤの描画モードを『差の絶対値』にして下のレイヤと統合
・差を目立たせる為にトーンカーブでライト側を一杯まで引っ張る(入力4、出力255)
・画像を2値化してから反転
・赤く着色して元の画像に重ねて表示

という一連の動作をAppleScriptで実行しています。


例えば、オリジナル画像(Image1)と、オレンジの種を消した画像(Image2)をPhotoshopで表示しておき、AppleScriptを実行すると、差異のあるピクセルを色付けした状態で表示します。(下の画像は比較し易いように並べたものです)



こちらはオリジナル画像(Image1)に対してトーンカーブで中間域の濃度をCMYK値で5%上げた画像(Image2)の場合。

こんな感じで色付け表示します。画像の色調をトーンカーブ等で調整した際、どの辺りまで影響が出るのかを確認する事ができます。

『DIFF_THRESHOLD』の値は、どれくらいの色の差があれば色付けするのかを決めるしきい値で、スクリプト1行目の値を上の画像のように220にしておくとCMYKの値でおよそ5%以上の差があれば色付けするようになり、値が小さい程わずかな色の差で反応するようになります。

スクリプト中でRGBに変換する前に『16bit/チャンネル』にしていますが、これは2つのレイヤーの画像のCMYK値が同じだったとしても、『8bit/チャンネル』のままだとRGBの変換後に僅かな数値の違いが出てしまうためです。


で、今回色んな画像で試してみて、ちょっと意外だった事が。



上の例は、左のオリジナル画像を『JPEGフォーマット(画質は最高の12)』で保存したものと、『EPS JPEGエンコーディング(最高画質)』で保存して、それぞれオリジナルと比べてどれだけ変化しているのかを見てみたんですが、どうもEPS JPEGエンコーディングの方が色が変化したピクセルが多い(=劣化が大きい)ようで、色々な画像で試してみたんですがどれも同じ傾向でした。まあ目で見た限りでは見分けは付かないんですが、てっきり同等のものだと勝手に思い込んでいたので自分にとっては『プチ驚愕の事実』でした。

以下が今回のAppleScript。スクリプトを実行するときは『比較したい2つの画像のみ』を表示しておきます。
■動作確認
MacOSX 10.5.8
Photoshop CS4
property DIFF_THRESHOLD : 50

tell application "Adobe Photoshop CS4"
	activate
	set doc1 to document 1
	set doc2 to document 2
	set current document to doc1
	
	tell doc1
		flatten
		select all
		copy
	end tell
	
	set current document to doc2
	
	tell doc2
		flatten
		paste
		set bits per channel to sixteen
		change mode to RGB
		set imgLay1 to background layer
		set name of imgLay1 to "Image 1"
		set imgLay2 to layer 1
		set name of imgLay2 to "Image 2"
		set blend mode of imgLay2 to difference
		duplicate imgLay1
		duplicate imgLay2
		move 2nd layer to after 3rd layer
		tell layer 1
			merge
			select all
			adjust using curves with options {class:curves, curve points:{{0, 0}, {4, 255}}}
			adjust using threshold adjustment with options {class:threshold adjustment, level:DIFF_THRESHOLD}
			adjust using inversion
		end tell
		make new art layer with properties {blend mode:lighten}
		fill selection with contents {class:RGB color, red:255, green:64, blue:64}
		merge layer 1
		set name of layer 1 to "Diff"
		set opacity of layer 1 to 70
		set blend mode of layer 2 to normal
	end tell
	
end tell
スポンサーサイト

画像のクリッピングパスをもう一方の同じファイル名の画像にコピーするAppleScript

地味な実用系スクリプト。

時々、入稿されてきたRGB画像が数百点にのぼり、しかもその画像を結構な短納期でキリヌキと色調補正&CMYK変換をしなければならない事があって、そんな場合はキリヌキを(海外の協力会社などに)外注し、同時進行で色調補正の作業をするんですが、後で仕上がってきたキリヌキ画像のクリッピングパスを、手元で色調補正していた画像に反映させてやる必要が出てきます。その作業を自動化するためのAppleScriptです。

実は、たけうちとおるさんのサイトにそのまんまの機能のAppleScriptがあったんですが、自分の作業環境だと意図しない動作をするようだったので、少しチェックをきつめにするようにして書きました。

■使い方
あらかじめ『キリヌキ済み(クリッピングパスがある)画像』と『キリヌキ前の画像』のフォルダを作り、その中に(対になる様)画像を整理して入れておきます。(必ずしも数が合っている必要はありませんが、後でチェックする事になるので始めのうちに揃えておいた方が良いでしょう。)

スクリプトを実行し、『キリヌキ済み(コピー元)』と『キリヌキ前』のフォルダの場所を聞いて来るので、それぞれを選択してやるとPhotoshopでの処理が始まり、キリヌキ済み画像のクリッピングパスをキリヌキ前の同名の画像に適用して行きます。

下記の様な、正しく処理出来なかったファイルは『赤ラベル』が付いて確認作業がしやすいようになっています。
・双方のフォルダで一致するファイル名のものが無かった。
・コピー元の画像にクリッピングパスが無かった。
・コピー先の画像には既にクリッピングパスがあった。
・Photoshopで開けなかった。
・…etc.

■動作確認
MacOSX 10.5.8
Photoshop CS4
tell application "Adobe Photoshop CS4"
	set ru to ruler units of settings
	set ruler units of settings to cm units
end tell

tell application "Finder"
	set srcFold to (choose folder with prompt "クリッピングあり画像(コピー元)のフォルダを選択") as string
	set srcFold to srcFold as string
	set destFold to (choose folder with prompt "クリッピングなし画像(適用先)のフォルダを選択") as string
	repeat with theFile in list folder destFold without invisibles
		set theFile to (destFold & theFile) as alias
		if not class of ((properties of theFile) as record) is folder then my setLabel(theFile, 2)
	end repeat
	set destFold to destFold as string
	repeat with theFile in list folder srcFold without invisibles
		set srcFile to (srcFold & theFile) as alias
		if not class of ((properties of srcFile) as record) is folder then
			try
				set destFile to (destFold & theFile) as alias
				my mergePath(srcFile, destFile)
				
			on error
				--コピー先のファイルを開けない(存在しない)場合もコピー元に赤ラベルを付ける
				my setLabel(srcFile, 2)
			end try
		end if
	end repeat
end tell

tell application "Adobe Photoshop CS4"
	set ruler units of settings to ru
end tell

activate me
beep
if my chkLabel(srcFold) or my chkLabel(destFold) then
	display dialog "処理に問題のある画像があります。" & return & "双方のフォルダの『赤いラベル』のファイルをチェックして下さい。" with icon 0
else
	display dialog "終了しました。"
end if


on mergePath(srcFile, destFile)
	tell application "Adobe Photoshop CS4"
		activate
		open srcFile showing dialogs never
		set srcDoc to current document
		set pathItem to path items in srcDoc whose kind is clipping
		
		if (count pathItem) is 0 then
			my setLabel(srcFile, 2)
			close srcDoc
			return
		end if
		
		--クリッピングパスが存在せず下の行の処理に失敗すると以降の記述が実行されない場合がある?(エラーは出ず再現条件不明)
		set cp to entire path of path items in srcDoc whose kind is clipping
		close srcDoc
		my setLabel(srcFile, 4)
		
		open destFile showing dialogs never
		set destDoc to current document
		if (count (path items in destDoc whose kind is clipping)) is 0 then
			make new path item in destDoc with properties {entire path:cp, name:"Clipping", kind:clipping}
			my setLabel(destFile, 4)
			close destDoc saving yes
		else
			close destDoc
		end if
		
	end tell
end mergePath


on setLabel(theFile, col)
	tell application "Finder"
		set label index of theFile to col
	end tell
end setLabel


on chkLabel(theFolder)
	tell application "Finder"
		repeat with theFile in list folder theFolder without invisibles
			set theFile to (theFolder & theFile) as alias
			if label index of theFile is 2 then return true
		end repeat
		return false
	end tell
end chkLabel

画像の色の分布を『xy色度図』にプロットしてみる(あと、CMYKプロファイルの事も少し)

MacOSX付属の『Grapher』を使った画像の色の分布図の作成その2。

今回は、カラーマネジメント関係の書籍等には必ず出てくる、馬蹄形の『xy色度図』上の座標に、画像の色の分布をプロットしてみます。

前のエントリではPhotoshopで画像を開き、JavaScriptを使ってサンプリングしたピクセルの『L*a*b*値』をファイルに書き出して、そのファイルをGrapherに読み込ませて表示させましたが、今回はピクセルの色を『xyY』の値で書き出すので、『L*a*b*』から『xyY』の値に変換する部分をJavaScriptに新たに書き加えました。

今回は色度を表す『xy』の二次元のグラフなので、明度を示す『Y』の値は使いません。

『L*a*b*』から『xyY』ヘの変換式は、
Color Conversion Algorithms 』(http://www.cs.rit.edu/~ncs/color/t_convert.html)や、
Color Conversion Library in ANSI C』 (http://www.tecgraf.puc-rio.br/~mgattass/color/ColorIndex.html)
あたりをを参考にしています。

PhotoshopのAdobeRGB環境で下のグラデーデョン画像を開き、JavaScriptを実行して書き出されたファイルをGrapherで読み込んで、色度図にプロットしてみます。


赤と緑の三角形の部分はそれぞれ『AdobeRGB』と『sRGB』の色域を表していますが、それらは色度図上の値をあらかじめ調べておいてグラフに数値を入力しました。また、グレーの馬蹄形の部分、360nm~830nmの各波長の単色光の色度を示す『スペクトル軌跡』も別途計算して求めた数値を読み込ませてプロットしてあります。


上のグラデーション画像を『JapanColor2001corted』のプロファイル、レンダリングインテントが『知覚的』の設定でCMYKに変換した場合の色の分布を見てみると、色域が以下の様に圧縮されているのが解ります。



次に、下の画像は始めからCMYKモードで作成した、CMYK各色100%と、その二次色のレッド、グリーン、ブルーをグラデーションにしたもので、


これを『JapanColor2001corted』で開いた状態でプロットしてみると、非常になめらかな色の分布を持つグラフがプロットされました。


同じ画像を、『某印刷所の本機(枚葉)の印刷物を測色して作成したプロファイル』を適用した状態でプロットすると、

ややいびつな輪郭でプロットされました。グリーン(上の頂点の部分)の色域がやや狭く、イエロー方向に転んでいるのが見て取れます。

ただ、これはいびつなプロファイルが悪いと言うのではなく、あくまで『プロファイル』として実際の印刷物の状態を表したものなので、特に、JapanColorをターゲットとした『印刷の標準化』が行われていない印刷会社では、おそらく色が合わない等の問題も出てくる筈なので、必ずしも『JapanColor2001corted』の方が良い結果になるとは言い切れないと思います。

今回プロットした画像を見て思ったんですが、『JapanColor2001corted』の不自然なほど整ったプロファイルは、『理想的なJapanColor』をターゲットにして最適化の処理がされた、『架空のプロファイル』に近いものの様な気がします。

カラーマネジメントの書籍等では『CMYKのカラー設定はJapanColor2001corted推奨』というのが殆どで、もちろん出鱈目なプロファイルで運用する事に比べればベストに近い選択という事で異論は無いんですが、画像をCMYK分解する時点ではトーンジャンプも無くキレイに分解されていても、後の工程でRIPにデバイスリンクプロファイルを噛ましたり、刷版や印刷で色を調整する必要が出るとすれば、『画像が劣化する要因が他の工程に移っただけ』とも考えられるので、その辺りもツッ込んで解説してあればなぁとか思った次第です。(画像の段階で劣化しないのが望ましいとは思いますが)

画像を『xyY』の数値で書き出すのに使ったJavaScriptは以下の通り。

■動作確認
MacOSX 10.5.7
Photoshop CS4
#target Photoshop

var samplingPixelsAsYxy = {
	
	'tristimulus_values': {
		/* 2 degrees */
		'ccTA_2': [109.850, 100.000, 35.585],
		'ccTC_2': [98.074,  100.000, 118.232],
		'D50_2': [96.422,  100.000, 82.521],
		'D55_2': [95.682,  100.000, 92.149],
		'D65_2': [95.047,  100.000, 108.883],
		'D75_2': [94.972,  100.000, 122.638],
		'F2_2': [99.187,  100.000, 67.395],
		'F7_2': [95.044,  100.000, 108.755],
		'F11_2': [100.966, 100.000, 64.370],

		/* 10 degrees */
		'A_10': [111.144, 100.000, 35.200],
		'C_10': [97.285,  100.000, 116.145],
		'D50_10': [96.720,  100.000, 81.427],
		'D55_10': [95.799,  100.000, 90.926],
		'D65_10': [94.811,  100.000, 107.304],
		'D75_10': [94.416,  100.000, 120.641],
		'F2_10': [103.280, 100.000, 69.026],
		'F7_10': [95.792,  100.000, 107.687],
		'F11_10': [103.866, 100.000, 65.627],
	
		/* PCS illuminant of AdobeRGB & sRGB profiles */
		'PCS_illuminant': [96.420, 100.000, 82.491],
		
		/* reference white in xyY coordinates */
		'chromaD65': [0.3127, 0.3290, 100.0]
	},


	'convertCIELabToXYZ': function(L, a, b) {
		var ref = this.tristimulus_values['PCS_illuminant']; //tristimulus of reference white
		var X, Y, Z;
		
		/* via http://www.cs.rit.edu/~ncs/color/API_JAVA/XYZSet.java
		var frac = (L + 16) / 116;
		if ( L < 7.9996 ) {
			Y = L / 903.3;
			X = a / 3893.5 + Y;
			Z = Y - b / 1557.4;
		} else {
			var tmp = frac + a / 500;
			X = tmp * tmp * tmp * ref[0];
			Y = frac * frac * frac * ref[1];
			tmp = frac - b / 200;
			Z = tmp * tmp * tmp * ref[2];
		}
		*/
		
		/* via http://www.tecgraf.puc-rio.br/~mgattass/color/CIELabtoXYZ.htm */
		var var_Y = ( L + 16 ) / 116;
		var var_X = a / 500 + var_Y;
		var var_Z = var_Y - b / 200;
		var_Y = Math.pow(var_Y, 3) > 0.008856 ? Math.pow(var_Y, 3) : ( var_Y - 16 / 116 ) / 7.787;
		var_X = Math.pow(var_X, 3) > 0.008856 ? Math.pow(var_X, 3) : ( var_X - 16 / 116 ) / 7.787;
		var_Z = Math.pow(var_Z, 3) > 0.008856 ? Math.pow(var_Z, 3) : ( var_Z - 16 / 116 ) / 7.787;
		X = var_X * ref[0];
		Y = var_Y * ref[1];
		Z = var_Z * ref[2];
		//
		return [X, Y, Z];
	},

	'main': function() {
		var t = new Date();
		var outputFile = '~/Desktop/xy_colors_64x64.txt';
		var sampling_size = 64;
		//var threshold = 10;
		var sampling_data = '';
		var ru = app.preferences.rulerUnits;
		app.preferences.rulerUnits = Units.PIXELS;
		var doc = app.activeDocument;
		doc.flatten();
		doc.resizeImage(sampling_size, sampling_size, 72, ResampleMethod.BICUBIC);
		//doc.resizeImage(sampling_size*2, sampling_size*2, 72, ResampleMethod.NEARESTNEIGHBOR);
		
		var smpl = doc.colorSamplers.add([0, 0]);
		var col = new SolidColor();
		var Yxy_x, Yxy_y;
		var XYZ = [];
		var X, Y, Z;
		for (var i=0; i<sampling_size; i++) {
			for (var j=0; j<sampling_size; j++) {
				smpl.move([j+0.5, i+0.5]);
				col = smpl.color;
				XYZ = this.convertCIELabToXYZ(col.lab.l, col.lab.a, col.lab.b);
				X = XYZ[0]; Y = XYZ[1]; Z = XYZ[2];
				Yxy_x = X / ( X + Y + Z );
				Yxy_y = Y / ( X + Y + Z );
				if (Y > 1) { sampling_data += Yxy_x + '\t' + Yxy_y + '\r'; }
			}
		}
		
		var f = new File(outputFile);  
		if (f.open("w")) {  
			f.encoding = 'BINARY';  
			f.write(sampling_data);
			f.close();
		}
		app.preferences.rulerUnits = ru;
		var now = new Date();
		alert('Finished!   time: ' + (now - t));
	}
}

if (app.documents.length > 0) {
	samplingPixelsAsYxy.main();
}

画像の色の分布を3Dグラフにプロットしてみる

MacOSXに付属しているグラフ作成アプリ『Grapher』を使って、画像の色(L*a*b*値)の分布を3Dのグラフにプロットしてみました。

この手の情報の表示は、高価なカラーマネジメントツールを買うとか、年間18万9千円の会費を払って研究会に参加すれば実現できると思いますが、手持ちのツールを使えばまあそこそこ近い事は出来るのではないかと思いやってみました。先日のエントリ、『PhotoshopでのCMYK分解カーブをJavaScriptを使ってプロットしてみる』を書いたのも、そんなふうに思ったからです。

まず、JavaScriptを使ってPhotoshopで開いている画像を64 x 64ピクセルに縮小し、その4096のポイントをサンプリングしてそれぞれのL*a*b*値をタブ区切りのテキストでファイルに書き出します。そしてそれをGrapherで読み込んで、3Dのグラフにプロットする様にしました。

Photoshopのカラー設定でAdobeRGBが設定された状態で、下のグラデーション画像のL*a*b*値を書き出してプロットすると、



AdobeRGBの色域一杯に色が均等に分布したグラフが現れました。

このグラフは横軸にa*チャンネル(-128~128)、縦軸がb*チャンネル(-128~128)、垂直のZ軸がL*チャンネル(0~100)になっています。

同じ画像がsRGBの色空間だと、

こんな感じになります。(比較の為にAdobeRGBのプロットを表示しています)

そして下の画像はAdobeRGBのカラースペースで開いてプロットしましたが、色の分布はsRGBの空間に収まっているようです。画像を保存するまでの過程でプロファイル変換されているのかも知れません。




Photoshop&JavaScriptでピクセルの色を取得してファイルに書き出す所で、CMYK分解カーブのプロットの時と同じく、ピクセル単位での操作が今ひとつ解らず、色を取得するのに1ピクセルの選択範囲を作ってその中のヒストグラムが立った数値を調べるという回りくどい事をしています。(なので処理は劇遅。カラーサンプラーを置いて取得するのも試みましたが、さらに遅かったです)

あと、Photpshopで色を扱う、『SolidColor』オブジェクトは、RGBなど1つのカラーモードの値を与えてやれば、後はカラー設定の作業用スペースに設定されたプロファイルに応じて、CMYKやL*a*b*の値が一意に決まるので簡単に他のカラーモードでの値を取り出せるみたいです。ただ、ドキュメントのカラープロファイルは無視される様なので注意が必要です。

■2009.06.06追記
ちょっとやっつけだったコードを直しました。ピクセルの色の取得にカラーサンプラを使う様に変更してあります。ほんの少しだけですが速くなりました。


■2010.03.08追記
このエントリで使用している『Grapher』のファイルをアップロードしました。以下のリンクから落とせます。
http://dl.dropbox.com/u/271700/cielab.gcx.zip


■画像のL*a*b*値を書き出すJavaScriptのソース(遅いです)
#target Photoshop

/*
function getPixelColor(x, y) {
	var hg;
	doc.selection.select([[x, y], [x + 1, y], [x + 1, y + 1], [x, y + 1]], SelectionType.REPLACE, 0, false);
	hg = doc.channels[0].histogram;
	for (var i=0; i<256; i++) if (hg[i] != 0) { colObj.rgb.red = i; break; }
	hg = doc.channels[1].histogram;
	for (var i=0; i<256; i++) if (hg[i] != 0) { colObj.rgb.green = i; break; }
	hg = doc.channels[2].histogram;
	for (var i=0; i<256; i++) if (hg[i] != 0) { colObj.rgb.blue = i; break; }
}
*/

var t = new Date();
var sampling_size = 64;
var ru = app.preferences.rulerUnits;
app.preferences.rulerUnits = Units.PIXELS;
var doc = app.activeDocument;
doc.flatten();
doc.resizeImage(sampling_size, sampling_size, 72, ResampleMethod.BICUBIC);
doc.resizeImage(sampling_size*2, sampling_size*2, 72, ResampleMethod.NEARESTNEIGHBOR);

var smpl = doc.colorSamplers.add([0, 0]);
var sampling_data = '';

for (var i=0; i<sampling_size*2; i+=2) {
	for (var j=0; j<sampling_size*2; j+=2) {
		smpl.move([j+1, i+1]);
		sampling_data += smpl.color.lab.a + '\t' + smpl.color.lab.b + '\t' + smpl.color.lab.l + '\r';
	}
}

var f = new File('~/Desktop/clelab_colors_64x64.txt');  
if (f.open("w")) {  
	f.encoding = 'BINARY';  
	f.write(sampling_data);
	f.close();
}

app.preferences.rulerUnits = ru;
alert('Finished.   time: ' + (new Date() - t));

PhotoshopでのCMYK分解カーブをJavaScriptを使ってプロットしてみる

Photoshopのカラー設定のプロファイルでCMYK分解する際のアミ%をプロットするJavaScriptを書いてみました。

分解カーブは、ニュートラルグレー(RGB 0,0,0~255,255,255)を分解した際のアミ%でプロットされ、カラープロファイル名やグレーバランスでのCMYKの最大値、インキの総量を表示します。

PhotoshopでこのJavaScriptを実行すると、以下の様な画像が生成されます。

Japan Colorが設定されている場合の分解カーブ。


こちらはSWOP。シャドウ側のCMYのグレー成分ががスミ版に置き換わっています


某社の広色域インキ用プロファイル。グレーバランス出すのにマゼンタとイエローがかなり少なめの設定になってる様です。


■課題というか問題点というか…
JavaScriptで『任意の位置にピクセルを描画する』やり方が良くわからなかったので、プロットする点のサイズの選択範囲を作り、それを塗り潰していく様なやり方なので処理がメチャクチャ遅いです(ウチのMacBook Proで全部描画するのに2分以上かかります)。パスを使って描いても良かったかも知れません。

■動作確認
MacOSX 10.5.6
Photoshop CS4
#target Photoshop

function setRgb(r, g, b){
	colObj = new SolidColor()
	colObj.rgb.red = r;
	colObj.rgb.green = g;
	colObj.rgb.blue = b;
	return colObj;
}

function plotColor(c_val, plot_color){
	c_val *=  plot_ratio;
	doc.selection.select([[510-i*2, 290-c_val-1.5], [510-i*2+2, 290-c_val-1.5], [510-i*2+2, 290-c_val+1], [510-i*2, 290-c_val+1]]);
	doc.selection.fill(plot_color, ColorBlendMode.NORMAL, 100, false);
}

function makeText(props) {
	lay = doc.artLayers.add();
	lay.kind = LayerKind.TEXT;
	ti = lay.textItem
	ti.font = 'HiraMinPro-W6';
	ti.contents = props.contents;
	ti.size = props.size;
	ti.color = props.color;
	ti.position = props.position;	
}

var ru = app.preferences.rulerUnits;
app.preferences.rulerUnits = Units.PIXELS;
var doc = app.documents.add(512, 320, 72, "CMYK Separation Curves", NewDocumentMode.CMYK);
var profile_name = doc.colorProfileName;
doc.changeMode(ChangeMode.RGB);

var colors = {
	'cyan': setRgb(0, 255, 255),
	'magenta': setRgb(255, 0, 255),
	'yellow': setRgb(255, 255, 0),
	'black': setRgb(0, 0, 0),
	'gray': setRgb(128, 128, 128),
	'white': setRgb(255, 255, 255),
	'line': setRgb(116, 116, 116)
};

var plot_ratio = 2.5;

doc.selection.selectAll();
doc.selection.fill(colors.gray, ColorBlendMode.NORMAL, 100, false);

for (var i=40; i<290; i+=25) {
	doc.selection.select([[0, i],[512, i],[512, i+1],[0, i+1]]);
	doc.selection.fill(colors.line, ColorBlendMode.NORMAL, 100, false);
}
var tgt_color = new SolidColor();

for (var i=255; i>-1; i--) {
	doc.selection.select([[510-i*2, 290], [510-i*2+2, 290], [510-i*2+2, 320], [510-i*2, 320]]);
	tgt_color.rgb.red = i;
	tgt_color.rgb.green = i;
	tgt_color.rgb.blue = i;
	doc.selection.fill(tgt_color, ColorBlendMode.NORMAL, 100, false);
	plotColor(tgt_color.cmyk.cyan, colors.cyan);
	plotColor(tgt_color.cmyk.magenta, colors.magenta);
	plotColor(tgt_color.cmyk.yellow, colors.yellow);
	plotColor(tgt_color.cmyk.black, colors.black);
}

doc.selection.deselect();
var max_cmyk = tgt_color.cmyk;
var total = max_cmyk.cyan + max_cmyk.magenta + max_cmyk.yellow + max_cmyk.black;
var ink_info = 'Max\r'
			+ 'Cyan : ' + Math.round(max_cmyk.cyan) + '%\r'
			+ 'Magenta : ' + Math.round(max_cmyk.magenta) + '%\r'
			+ 'Yellow : ' + Math.round(max_cmyk.yellow) + '%\r'
			+ 'Black : ' + Math.round(max_cmyk.black) + '%';
			
makeText({'contents': profile_name, 'size': 20, 'color': colors.white, 'position': [10, 30]});
makeText({'contents': ink_info, 'size': 12, 'color': colors.white, 'position': [10, 55]});
makeText({'contents': 'Total\r' + Math.round(total) + '%', 'size': 12, 'color': colors.white, 'position': [120, 55]});

app.preferences.rulerUnits = ru;
Profile
choco
Author : choco

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

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

Categories
Favorites


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