PHP+wkhtmltoimage でウェブサイトのスクリーンショット・サムネイルを作成する
ブログを書いていると、ホームページを色々紹介することが多いです。そんな時にはスクリーンショットも一緒に添えてブログの記事にする事が多々あります。そのスクリーンショットを撮るという作業をPHPで自動化出来たらちょっと楽になる、CMSに組み込めればURLを貼り付けるだけで自動的にスクリーンショットを撮ってくるなんてのも実現出来てしまいますね!今回は、単純にPHPからwkhtmltoimageを使ってスクリーンショットを撮影するところまでです。
PHP+wkhtmltoimage でスクリーンショット
wkhtmltoimage は wkhtmltopdf に一緒に同封されているプログラムです。Window、linux、OS X、FreeBSD その他のOSで利用可能です。今回はWindowsの環境で動かします
wkhtmltopdfをインストールする
こちらのページより、対象のものをダウンロードします。今回行った環境は WordPress 7 64-bit ですので Windows (MSVC 2013) の 64-bit 版をダウンロードしました
http://wkhtmltopdf.org/downloads.html
Windowの場合はインストールは簡単で、ダウンロードしたファイルをダブルクリック等で開いて、ウィザードにしたがってインストールを完了させるだけです。
wkhtmltoimageのパスを調べる
wkhtmltopdfのインストールすると、wkhtmltoimageも一緒にインストールされています。そのファイルがあるパスを調べましょう。後に利用します
Windows 7 でしたら C:\Program Files\wkhtmltopdf\bin にあるかと思います
このままでは、Program Files のところにスペースが入っているので コマンドラインでは正しく認識できないので、Program Filesのところは PROGRA~1 に置き換えます
そしてファイルまでを指定した形にするとこのように、またバックスラッシュはスラッシュへと置き換えておく。
C:/PROGRA~1/wkhtmltopdf/bin/wkhtmltoimage
wkhtmltoimageをPHPで実行する
wkhtmltoimage は基本的にはコマンドラインでは以下のように使います
$ プログラムへのパス [option] URL ファイルの保存先 $ C:/PROGRA~1/wkhtmltopdf/bin/wkhtmltoimage http://yahoo.jp yahoo.png
プログラム、オプション、URL、保存名 この順になっています。ファイルの保存先はパスを含んだ形で指定するのがいいでしょう。PHPから実行する場合は、そのPHPファイルがある場所に作られます
PHPではコマンドラインを exec() もしくは system() のどちらかで実行する事ができます。
<?php system("C:/PROGRA~1/wkhtmltopdf/bin/wkhtmltoimage http://yahoo.jp yahoo.png");
これで一応スクリーンショットの撮影が出来ます。ファイルタイプはファイル名の拡張子を変えるだけでjpgにも出来ます。その他オプションを付けることで、キャプチャーサイズや縮小、jpgでの画質の設定等を行うことが出来ます。
こちらが撮影したスクリーンショット
wkhtmltoimageのオプション
オプションはコマンドプロンプトから C:/PROGRA~1/wkhtmltopdf/bin/wkhtmltoimage -H とすれば全てのオプションを確認することが出来ます。
基本的に使いそうなオプション
--crop-h 300 //縮小サイズ 縦 --crop-w 600 //縮小サイズ 横 --javascript-delay 0 //javascriptの実行待ち時間 ms --quality 95 //jpgでの画像の画質設定 --width 300 //スクリーンショットの横幅 --height 300 //スクリーンショットの縦幅 --zoom 0.5 //縮小拡大の設定、ブラウザのズームのような機能
オプションを追加して撮影したスクリーンショットの例
<?php system("C:/PROGRA~1/wkhtmltopdf/bin/wkhtmltoimage --width 300 --height 200 --zoom 0.3 http://yahoo.jp yahoo_300_200.png");
クロープを使わずに、縮小したようなスクリーンショットも撮影できますね。いつかCMSにwkhtmltoimageを使って作業の効率化をしてみたいですね。またwkhtmltoimageを使ってみて思ったのは、PHPではコマンドを実行するだけなので非常にシンプル。そして、スクリーンショットの撮影の速度まぁまぁです サイズが大きくなると2秒を超えますが
COMMENT