前のエントリーの続き:sitecapturについて

MacBookで自動でサムネイルを生成できるかなと思い、作成しました。実現手順としては以下のような方法をとりました。

  1. ブラウザを起動、指定したURLのページを開く
  2. screencaptureコマンドで画面全体をキャプチャ
  3. 画像のウェブサイトが表示されている部分のみ切り出す

ブラウザ(Safari)の起動からキャプチャまで

指定したURLでブラウザを開き、画面の左上に移動させるためにAppleScriptを利用しました。画像を切り出すのでウインドウの出現位置と大きさを指定する必要があったからです。
ページが開かれ6秒経過した後、screencaptureを使って画面全体をキャプチャしウインドウを閉じます。

--Safariを起動しキャプチャ
on capture()
	tell application "Safari"
		activate
		do JavaScript "window.open('" & urlData & "','left=0,top=0');" in document 1
		do JavaScript "window.moveTo(0,0);" in document 1
		do JavaScript "window.resizeTo(1050,770);" in document 1
		delay 6
		do shell script "/usr/sbin/screencapture " & screenFile
		do JavaScript "window.close();" in document 1
	end tell
end capture

こうして作成したアプリケーションが、safaricapture.appになります。これをPerlのsystemで実行するわけですが、引数でURLを渡す方法が分かりませんでした。仕方がないのでPerl側で外部ファイル(url.txt)にURLを記述し、読み込むようにしました。

--URLと画像の出力先ファイル名を取得
on getUrl()
	tell application "Finder"
		set screenFile to POSIX path of ((container of (path to me)) as text) & "site.png"
		set myFile to ((container of (path to me)) as text) & "url.txt"
		set listFile to open for access myFile
		set urlData to read listFile before " "
		close access listFile
	end tell
end getUrl

AppleScriptは情報も少なくバージョンにより動作が変わってくるので、あまり自信がないです(割と大きめの本屋に行きましたが本自体発見できず)。と言いながら色々書いてますが。

画像を切り出す

safaricapture.appを実行すると画面全体をキャプチャしたsite.pngが出力されます。この画像からウェブサイトの表示されている部分のみを切り出します。切り出しにはPerlのImagerを使いました。

my $newimage = $image->crop(left=>0, top=>100, width=>1024,height=>768);

切り出された画像は'site-*******.png'で出力されます。これで完成です!


サムネイル生成のWebServieはどうやっているのか気になるところですが、LinuxWindowsであれば画面キャプチャにはImageMagickのimportを使うと良さそうです。