概要
前回、snappyの基本的な使い方を試しました。
今回はsnappyを使って、あらかじめ、定義してある複数のwebサイトのサムネイルを保存してみたいと思います。
前提
composerがインストールされている
wkhtmltopdfがインストールされている。
適当なphpプロジェクトがある。
セットアップは以下の記事を参照してください。
phpのsnappyライブラリをmacで使用して、webサイトのサムネイルを取得する
snappyのインストール
phpのプロジェクトでcomposer.jsonを作成し、
composer.jsonに以下を記述します。
touch composer.json
{ "require": { "knplabs/knp-snappy" : "*" } }
composer install
snappyがインストールされました。
サムネイルを保存するディレクトリを作成します。
mkdir images
今のところ、phpプロジェクトは以下のような構成になります。
index.phpを作成します。
touch index.php
以下を記述します。
<?php use Knp\Snappy\Image; require __DIR__ . '/vendor/autoload.php'; $snappy = new Image('/usr/local/bin/wkhtmltoimage'); $snappy->setOption('width', '1024'); $snappy->setDefaultExtension('jpg'); $web_site = array( "google" => "https://www.google.co.jp", "wikipedia" => "https://ja.wikipedia.org/wiki/メインページ", "yahoo" => "http://www.yahoo.co.jp" ); foreach ($web_site as $name => $url){ file_put_contents("images/${name}.jpg",$snappy->getOutput($url)); } ?>
以下の項目はsnappyのimageライブラリを使用する事の宣言と、composerでインストールしたライブラリの読み込み、snappyインスタンスの作成です。「/usr/local/bin/wkhtmltoimage」のパスはもしかすると個人のパソコンで違うからもしれません。その場合は「which wkhtmltoimage」で調べてください。
use Knp\Snappy\Image;
require __DIR__ . ‘/vendor/autoload.php’;
$snappy = new Image(‘/usr/local/bin/wkhtmltoimage’);
setOptionで幅を1024にしてい、画像の種類をjpgにしました。
$snappy->setOption(‘width’, ‘1024’);
$snappy->setDefaultExtension(‘jpg’);
サービス名とサイトのurlの連想配列
$web_site = array(
“google” => “https://www.google.co.jp”,
“wikipedia” => “https://ja.wikipedia.org/wiki/メインページ”,
“yahoo” => “http://www.yahoo.co.jp”
);
連想配列をeachして取り出し、それぞれの画像をgetOutputで取得し、images/サービス名で保存しています。
foreach ($web_site as $name => $url){
file_put_contents(“images/${name}.jpg”,$snappy->getOutput($url));
}
で、これの実行なんですけど、当初はapacheでindex.phpを実行していたのですが、phpコマンドからできるので、以下のコマンドで実行します。
php index.php
imagesフォルダにgoogle.jpgやyohoo.jpgが保存されます。
ちなみに、現在のプログラムはウェブサイト全体の画像をとってきましたが、高さをある程度で切りたい場合は
$snappy->setOption('crop-h', '400');
を記述すれば、上から何ピクセルかでトリミングすることができます。
まとめ
webサイト全体の画像を撮りたい時って、webサービス作っているとよくあるのですが、いかんせん、ブラウザの拡張だと、GUI操作が大変ですが、これで一気に楽になりますね。