<?chocolife>

provided "as is", with all faults.

スポンサーサイト

Tags :
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

AppleScriptでJPEG画像がプログレッシブかどうかを判定する

Tags : [DTP] [MacOSX] [AppleScript] [Image] [JPEG]
AdobeのPhotoshopフォーラムに投稿されていたのを見て、ちょっと考えてみました。

ApplescriptでプログレッシブJPEGはわかりますか?
(Adobe Forums: フォーラム: Photoshop (Japan))

PhotoshopのAppleScriptリファレンスを眺めてみたり、保存した画像のXMPメタデータにそれらしい情報が含まれていないか見てみたんですが、Photoshopを使った解決法が見つからなかったので、Photoshopを使わない別の方法でやってみます。

通常この手の処理はバイナリデータを先頭から読んでいってマーカーの値が出てきたらそれを判別して……みたいな感じになりますが、AppleScriptでバイナリデータを扱うのはちょっと面倒そうなので、Unix系のOSで使える出来合いのライブラリに処理を投げてしまったほうが手取り早く、確実だと思います。

で、今回使用してみたのは『libjpeg』ライブラリに含まれる『rdjpgcom』コマンドで、シェルを使ってJPEG画像に関する情報を取り出す事ができます。このコマンドをAppleScriptの『do shell script』で呼び出してやります。

そのためにはMacに『libjpeg』をインストールしてやる必要がありますが、下のサイトでコンパイル済みのインストーラ形式のものが公開されています。

http://ethan.tira-thompson.org/Mac_OS_X_Ports.html
(@ITで紹介されていたものですが、インストーラの素性は保証できないので、利用は自身の判断で…今回必要なのは『rdjpgcom』コマンドだけなので、『libjpeg』本体は無くても良いようですが。)

上記インストーラでは『rdjpgcom』コマンドは『/usr/local/bin』にインストールされます。

このコマンドの使い方は、例えばデスクトップにある画像、ファイル名『baseline.jpg』の情報を見る場合、ターミナルで、
rdjpgcom -verbose /User/hogehoge/Desktop/baseline.jpg
のように -verbose オプションを付けてファイルのパスを渡してやれば、
JPEG image is 1280w * 1024h, 3 color components, 8 bits per sample
JPEG process: Baseline
のような形で返ってきます。

『rdjpgcom』コマンドは、JPEG画像以外のファイルを処理した場合、標準エラー出力に『Not a JPEG file』の文字列を返してくるので、メッセージを『try~on error』で拾えます。

AppleScriptから使う場合はこんな感じでしょうか。
on open drop
	repeat with aFile in drop
		tell application "Finder"
			set fPath to POSIX path of aFile as string
			set scpt to "/usr/local/bin/rdjpgcom -verbose " & quoted form of fPath
			try
				set rslt to do shell script scpt as string
				if rslt is not "" then
					display dialog name of aFile & return & word 3 of paragraph 2 of rslt
				else
					display dialog "不明"
				end if
			on error errStr
				display dialog errStr
			end try
		end tell
	end repeat
end open
上記のスクリプトではAppleScirpt側で、シェルから返ってきた文字列が入る変数rsltから『Progressive』『Baseline』を取り出していますが、
rdjpgcom -verbose /User/hogehoge/Desktop/baseline.jpg | grep process | awk '{ print $3 }'
のようにgrepとawkを通してやれば、シェル側で
Baseline
の文字列だけを取り出せます。(この場合、JPEG以外のファイルを処理すると何も返ってきません。)

結局AppleScriptでは出来てないじゃん!とか言われそうですが、Finderなどの処理を自動化しつつ、手に負えない処理はシェルや他の言語に丸投げするのがグルー(糊)な言語としてのAppleScriptの正しい使い方だと思っているので。
関連記事
FC2 Management
  1. 2011/07/03(日) 21:34:28|
  2. DTP & Graphics
  3. | TB:0
  4. | Comments:0
| ホーム | AppleScript & Photoshopで2つの画像の差異がある部分を着色表示する>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://chocolife.blog80.fc2.com/tb.php/102-f5acb94b
この記事にトラックバックする(FC2ブログユーザー)
 | 

Profile

choco

Author:choco
印刷・製版の現場を経て、現在は広告制作会社に勤務。
Photoshopを使ったビジュアル制作を主に担当。
時々コードも書きます。

Categories

Favorites














Search

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