スポンサーサイト

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
関連記事
スポンサーサイト

コメント

非公開コメント

Profile
choco
Author : choco

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

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

Categories
Favorites


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