スポンサーサイト

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

Photoshopで画像のサムネイルを作成し一覧のHTMLを書き出すAppleScript

ドロップしたフォルダの中にある画像ファイルのサムネイルをPhotoshopを使って作成し、それを一覧表示するHTMLを生成してファイルに書き出すAppleScript。

生成されたHTMLをブラウザで表示するとこんな感じになります。


サムネイルの生成には、Photoshopを使う以外にもOS Xに付属のImageEvents(sips)やFinkでインストールしたImageMagickも試して見たんですが、ImageEvents(sips)はEPSが扱えないのでダメだったり(pstopdfコマンドで一旦PDFに変換する方法もありますが時間が掛かりすぎるので却下)、ImageMagickはサイズの大きい画像を処理する時やたら時間が掛かったりエラーで落ちてしまったりで、結局Photoshopでやるのが無難でした。EPSを処理する場合はImageMagickの方が速かったような気がします。

なんでこれを作ったかと言うと、ウチの職場ではDVDに画像をバックアップしたあとAppleScriptを使ってWebベースのアプリに注番やら品名を登録してるんですが、どうせなら画像の一覧が見れた方が良いなと思い、サムネイルを作成する部分を作ってみたわけです。で、生成したHTMLをWebアプリに登録する注番にリンクしたり、サーバにアップロードする処理も付け加えていこうかなと。まあやってみたかっただけなんですけど。

■使い方
サムネイルのフォルダとHTMLを保存するディレクトリの部分と、(* サムネイルの生成 *)部分の使用するPhotoshopのバージョンを適宜書き換え、アプリケーションとして保存し、画像が入ったフォルダをドロップします。
ドロップしたフォルダ単位でHTMLが生成されます。(スクリプト中ではドロップされたフォルダを"Job"として扱ってます)

■動作確認
MacOSX10.4.11 & PhotoshopCS3
MacOSX10.3.9 & PhotoshopCS2
--作業用ディレクトリのパス。※要書き換え※
property work_dir : "Macintosh HD:Users:USERNAME:Desktop:Works"

--サムネイルの長辺のピクセル数
property thumb_size : 120

property html_top : "<html>
<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=x-sjis\">
<style type=\"text/css\">
body { background: #ccc; margin-top: 30px; }
#container { width: 85%; margin-left: auto; margin-right: auto; }
table { border-collapse: collapse; color: #333; background: #fff; font-size: 0.8em; }
td { padding: 5px; text-align: center; width: 120px; border: #aaa solid 1px; }
</style>
</head>
<body><div id=\"container\">
"
property html_bottom : "
</table></div></body>
</html>"
global target_list
global job_num
on open drop
	set start_time to current date
	set html_top to html_top as text
	set html_bottom to html_bottom as text
	set job_num to 1
	tell application "Finder"
		repeat with this_job in drop
			set target_list to {}
			
			(* JobごとのHTMLファイルとサムネイルを保存するフォルダを作成 *)
			set html_filename to "thumb_" & job_num & ".html"
			set html_fileRef to (make file with properties {name:html_filename} at work_dir) as alias
			open for access html_fileRef with write permission
			set title_html to "<p style=\"{font-weight: bold; font size: 1.5em;}\">[" & name of this_job & "] : の画像一覧</p>" & return as text
			write html_top & title_html & "<table>" & return to html_fileRef
			set dest_dir to "thumb_" & job_num as Unicode text
			make new folder with properties {name:dest_dir} at work_dir
			if kind of this_job is "フォルダ" then
				set job_contents to every item of this_job
			else
				set job_contents to this_job as list
			end if
			
			(* Jobに含まれるアイテムをリストに格納*)
			repeat with theItem in job_contents
				my set_itemsToList(theItem, target_list)
			end repeat
			
			(* リスト中のファイルを処理*)
			set img_n to 1
			set col_n to 0
			repeat with theFile in target_list
				set html_tbody to "" as text
				if my is_imageFile(theFile) is true then --画像ファイルの場合のみ処理する
					set fName to name of theFile as Unicode text
					set thumb_name to "job" & job_num & "-" & img_n & ".jpg"
					set thumb_path to (work_dir & ":" & dest_dir & ":" & thumb_name)
					my create_thumb(theFile, thumb_path)
					if col_n is 0 then
						set html_tbody to html_tbody & "<tr>" & return
					else
						if col_n is 5 then
							set html_tbody to html_tbody & "</tr>" & return
							set col_n to 0
						end if
					end if
					set html_tbody to html_tbody & "<td><img src=\"" & dest_dir & "/" & thumb_name & "\">" & "<br>" & fName & "</td>" & return as text
					write html_tbody to html_fileRef
					set img_n to img_n + 1
					set col_n to col_n + 1
				end if
			end repeat
			
			(* 仕上げ *)
			repeat 5 - col_n times --列の残りのコラムを<td>で埋める
				write "<td> </td>" to html_fileRef
			end repeat
			write html_bottom to html_fileRef
			close access html_fileRef
			set job_num to job_num + 1
		end repeat
		activate me
		beep
		display dialog "終了しました。" & return & "処理時間 : " & ((current date) - start_time) & "秒"
	end tell
end open


(* サムネイルの生成 *)
on create_thumb(tgt_file, dest_file)
	tell application "Adobe Photoshop CS4"
		activate
		open tgt_file showing dialogs never
		set theDoc to current document
		tell theDoc
			if width > height then
				resize image width thumb_size as pixels resolution 72 resample method bicubic
			else
				resize image height thumb_size as pixels resolution 72 resample method bicubic
			end if
			change mode to RGB
			convert to profile "sRGB IEC61966-2.1" intent relative colorimetric with blackpoint compensation and dithering
			set save_opts to {class:JPEG save options, embed color profile:false, quality:10}
			save in file dest_file as JPEG with options save_opts appending no extension with copying
			close without saving
		end tell
	end tell
end create_thumb


(* アイテムを再帰的にリストに格納 *)
on set_itemsToList(thePath, target_list)
	tell application "Finder"
		if not kind of thePath is "フォルダ" then
			set end of target_list to thePath as alias
		else
			set theFolders to every folder of thePath
			repeat with aFolder in theFolders
				my set_itemsToList(aFolder, target_list)
			end repeat
			set theFiles to every file of thePath
			repeat with aFile in theFiles
				set end of target_list to aFile as alias
			end repeat
		end if
	end tell
end set_itemsToList


(* 画像かどうかを判別 *)
on is_imageFile(theFile)
	tell application "Finder"
		set fPath to POSIX path of theFile as Unicode text
		if kind of theFile is "Adobe Photoshop ファイル" or kind of theFile is "Adobe Photoshop EPS ファイル" then
			return true
		else
			try
				set fType to 2nd word of (do shell script "sips -g all " & quoted form of fPath & " | grep format")
				if fType is "psd" or fType is "tiff" or fType is "jpeg" or fType is "gif" or fType is "png" then return true
			on error
				return false
			end try
		end if
		return false
	end tell
end is_imageFile
スポンサーサイト

debianでapt-getの質問に適当に"Y"押すと危険。

debian(sarge)でapt-getする際の質問に適当に答えてしまって、パッケージの依存関係がめちゃくちゃになりapt-getでのインストールが全くできなくなったので、その修復作業のメモ。

インストールが出来ないだけならまだしも、もともと入ってたgnomeとかnautilusまで消えてしまって、使用に思いっきり支障が出たのでこれはもう丸ごと再インストールか?…etchにアップグレードもしたいし…とか思いながらとりあえず修復を試みました。


以下、メモとか取る余裕は無かったんで覚えている限りの状況と作業を羅列。

・ランチャーからnautilusを起動しようとしたらエラーが出て起動出来なかったので、dpkg -lしてみるとgnome関連のパッケージが根こそぎremove(アンインストール)されてた。

・removeされたパッケージをapt-getで再インストールしようとしたが、libc6とそれに含まれるtzdata、localeが無い旨の依存関係のエラーが出る。

・どのパッケージをapt-getしようとしても、上記のlic6が…の依存関係で堂々めぐり。しかもlibc6自体はインストールされてる。

・apt-get -f installで依存関係を修復しようとしたら、カーネル以外殆んど全部じゃないか?ってくらいのパッケージをremoveする旨のメッセージが出て、恐くなってabort。

・どうやらlibc6に含まれる仮想パッケージのglibc-2.7が無い事で引っかかってる模様。

・apt-lineからのインストールを諦め、試しにlibc6のdebパッケージを落して来てdpkg -iでインストールしてみる。

・依存関係で弾かれる事無くインストール完了。

・gnome関連のパッケージも、最初は依存関係のエラーが出たが、apt-get -f installで修復した後、インストール完了。

以上で半日つぶれました。
apt-getとdpkgでは依存関係や仮想パッケージに関するふるまいが違うのかどうなのか…とりあえず同じ様な目に逢った人のために書いときます。

mala氏の言ってる事は、まあそりゃそうだろうとは思う

『「知ったこっちゃない」という人の耳元で大声で叫ぶぐらいに主張しないと』
from M.C.P.C.―むり・くり―プラスコミュニケーション

■追記■
mala氏は別にDTP界隈云々を言ってるんじゃなくて、自分がメシ食うための業務で必要なら何で自前で用意するなり、カネ出して買うなり、作る奴雇うなりしないのか?じゃ今までどうやって仕事してたんだ?非効率な作業ちまちまやってたのか??みたいなヌルさが単に気に食わないだけなんじゃないかと思った。
■追記ここまで■

CLさんとmala氏の異種格闘技というか場外乱闘みたいになってるのを見物しつつ、需要があるのかどうかはさていおいて、mala氏が書いたやつにちょっとだけ変更加えて、リアルタイムで文字数をカウント出来るようにしてみました。

『文字数をカウントする』(別窓で開きます)

入力した文字数をリアルタイムでカウントしていきます。あと、mala氏のはスペースを無視するチェックを入れるとタブや改行まで無視してしまうので、スペースだけ(全角・半角共に)を無視するようにしました。

て書いてたら新しいエントリがアップされてた。
Profile
choco
Author : choco

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

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

Categories
Favorites


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