PHP+wkhtmltoimage でウェブサイトのスクリーンショット・サムネイルを作成する

PR

ブログを書いていると、ホームページを色々紹介することが多いです。そんな時にはスクリーンショットも一緒に添えてブログの記事にする事が多々あります。そのスクリーンショットを撮るという作業を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での画質の設定等を行うことが出来ます。

 

こちらが撮影したスクリーンショット

yahoo

 

 

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");

yahoo_300_200

 

クロープを使わずに、縮小したようなスクリーンショットも撮影できますね。いつかCMSにwkhtmltoimageを使って作業の効率化をしてみたいですね。またwkhtmltoimageを使ってみて思ったのは、PHPではコマンドを実行するだけなので非常にシンプル。そして、スクリーンショットの撮影の速度まぁまぁです サイズが大きくなると2秒を超えますが

PR

COMMENT

コメントを残す

PR

9ineBBの管理人が運営するサイト

WDG WEB DESIGN GALLERY ウェブデザインギャラリー