スポンサーサイト

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();
}
スポンサーサイト

Illustratorでグラデーションの塗りを適用されたテキストを検索するJavaScript

ちょっと古いネタですけど、以前笹川%DTPオペさんのエントリ経由で見た、
イラレで、グラデーションの塗りを適用してしまったテキストを検索する方法?』from DTP駆け込み寺の掲示板
の投稿より。

Illustratorでテキストの塗りにグラデーションが適用されていても、一見するとただのスミ文字に見えていますが、


アウトライン化するとグラデーションがかかっています。


で、この一見スミ文字に見えているのに実はグラデーションが適用されている箇所を検索出来ないかと言う事なので、それ用のJavaScriptを書いてみました。
検索の処理自体はさほど難しくないんですが、テキストツールが入力状態(入力カーソルが出ている状態)だと、思った通りの動きをしてくれないのでその点でちょっと手間取りました。

このスクリプトを実行すると、テキストの塗りにグラデーションが適用されているテキストフレームを選択された状態にして、それが何カ所あったのかをダイアログで表示します。(バウンディングボックスの表示が有効になっているとちょっと見辛いかも知れません)


選択箇所の数を表示するダイアログ。


■注意点
使用の際はテキストツール以外のツールを選択しておく必要があります。
ブラウザの環境等でスクリプト中に『円マーク』が見えている場合は『バックスラッシュ』に置換してから使用してください。

■動作確認
MacOSX 10.5.6
Illustrator CS4
#target illustrator 

function selectGradientText() {
	var doc = activeDocument;
	var TF = doc.textFrames;
	var mes = 'テキストにグラデーションが適用されている箇所はありません。';
	doc.selection = null;
	for (var i=0; i<TF.length; i++) {
		L1: for (var j=0; j<TF[i].characters.length; j++) {
			if (TF[i].characters[j].fillColor == "[GradientColor]") {
				TF[i].selected = true;
				break L1;
			}
		}
	}
	try { 
		//テキストツールが入力状態の場合、選択されたオブジェクトがundefinedになる
		var cnt = doc.selection.length;
		if (cnt > 0) mes = 'グラデーションが適用された文字が含まれるテキストフレームを ' + cnt + '箇所 選択します。';
		alert(mes);
	} catch(e) {
		alert('テキストツールが選択されていると正しく動作しません。');
	}
}

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

Ubuntu8.10でちょっと古めのスキャナEPSON GT-S600を使う

最近自宅で使ってるPCの環境をDebian sargeからUbuntu 8.10に入れ替えました。
OSのインストール自体はあっさり終わったんですが、スキャナを使おうとした際に若干引っかかった部分があったのでメモしておきます。

もともと『xsane』がインストールされていたので、Ubuntuだしひょっとしたらそのまま使えるんじゃないか…と思って起動してみたんですが、

ダメでした。2年程前のGT-S600なので、最近の機種ならどうなのか分かりませんが。

なので、以前のDebian sargeの時と同じく、エプソンスキャナのLinux用ドライバを提供しているアヴァシスのサイトから、機種毎に用意されているRPMパッケージ

『iscan-2.3.0-1.c2.i386.rpm』
『iscan-plugin-gt-s600-2.0.0-1.c2.i386.rpm』

を落としてきて、
sudo alien -i iscan*
でインストール。『/etc/sane.d/dll.conf』を開き、
epkowa
の一行を追加します。
Ubuntuを含むDebian系で注意する点として、記述されてるコメントにあるように、このファイルを『/etc/sane.d/dll.d』に移動しておく必要があります。

で、今のままだとスーパーユーザのみがスキャナを利用出来る状態なので、『/etc/udev/rules.d/40-basic-permissions.rules』ファイルの
# USB devices (usbfs replacement)
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0664"
SUBSYSTEM=="usb_device", MODE="0664"
の部分に
# USB devices (usbfs replacement)
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0664", GROUP="admin"
SUBSYSTEM=="usb_device", MODE="0664", GROUP="admin"
赤色で示した記述を追加しておくと、USBデバイスファイルの所有がadminグループとして作成されるので、一般ユーザでもadminグループに入っていればスキャナを利用出来るようになります。(Ubuntuではインストール時に作ったユーザはデフォルトでadminグループに入ってると思います)

この設定を反映させるためにPCを再起動するか、
sudo service udev restart
としてudevを再起動します。

これで『xsane』もしくは『iscan』を起動してスキャナが使用出来る状態になっている筈です。

USBデバイスファイルのパーミッションの問題に関しては、debian MLでのDebian Projectの武藤氏の発言が参考になりました。
[debian-users:50581] Re: lsusb が情報を表示しなくなった


iscanを起動した様子


xsaneを起動した様子



あと、これは今回のスキャナの利用には関係無かったみたいですが、Ubuntu 8.10はUSBのデバイスファイルを『/proc/bus/usb/』以下に作りません。
ls /proc/bus/usb/
. ..
なので、USB機器を使用しようとしてデバイスが見つからない等の不具合が出た場合、『/proc/bus/usb/』以下のデバイスファイルにアクセスしようとしてる可能性があるので、
sudo mount -rbind /dev/bus/usb /proc/bus/usb
として、『/proc/bus/usb/』からもアクセス出来るようにすれば解決するかもしれません。これを毎回やるのは面倒なので、『/etc/init.d/mountdevusbfs.sh』ファイルの
do_start () {
#
# Mount a tmpfs on /dev/shm
#
SHM_OPT=
[ "${SHM_SIZE:=$TMPFS_SIZE}" ] && SHM_OPT=",size=$SHM_SIZE"
domount tmpfs shmfs /dev/shm tmpfs -onosuid,nodev$SHM_OPT

#
# Mount /dev/pts. Master ptmx node is already created by udev.
#
domount devpts "" /dev/pts devpts -onoexec,nosuid,gid=$TTYGRP,mode=$TTYMODE

#
# Make /proc/bus/usb work
#
mount --rbind /dev/bus/usb /proc/bus/usb

}
のブロックに、赤色の部分の記述を付け加えておくと良いかもしれません。
Profile
choco
Author : choco

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

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

Categories
Favorites


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