PHPとImageMagickでの画像縮小比較
売店に行ったらおもしろいのが売っていたので購入。
- 作者: クーガー株式会社,石井敦
- 出版社/メーカー: インプレスジャパン
- 発売日: 2008/11/28
- メディア: 大型本
- 購入: 4人 クリック: 89回
- この商品を含むブログ (7件) を見る
PHPとの連携(phpのextentionでなく純粋にコマンド実行)があるのがうれしい。
ってことで、ちょっくら画像のサムネイルをしてみました。
コマンドは簡単なので、もしPHPで画像の縮小とかに挫折した人はこちらがお勧めかも。
#コマンド実行なのでファイル名のエスケープ(escapeshellcmd)など付けてね。
$CONPATH = "C:\\Program Files\\ImageMagick-6.2.8-Q16\\"; $dirpath = "img"; $filename = "01.jpg"; $cmd = " \"{$CONPATH}convert.exe\" {$dirpath}/{$filename} -resize 100x thumimg_imagick/{$filename}";
これで画像を横幅100pxに縮小保存してくれます。
100x200とかにすると横100pxか縦200pxに縮小します。縦横のサイズは縮小する際、その値に達した時のほうが優先されます。
んでベンチマークはどうなんだろうってことでやってみました。
いまいち!
しかしImageMagickはコマンドライン一行でいろいろなこと(フィルターとか)ができるのでこれはケースバイケースだね。
パラ見して便利そうだなぁって思った機能リスト
- AVIをアニメーションGIFに変換
- いろいろなフィルター
- 画像・テキスト合成
- 画像形式変換
ベンチを計測したプログラムのソースはこちら
<?php ini_set('include_path', 'c:\wamp\php\pear' . PATH_SEPARATOR . ini_get('include_path')); //ImageMagickのパス $CONPATH = "C:\\Program Files\\ImageMagick-6.2.8-Q16\\"; //ベンチマーク require_once 'Benchmark/Timer.php'; $profiler = new Benchmark_Timer; $profiler->start(); //ファイルリスト取得 $dirpath = "img"; $dir = dir( $dirpath ); while( $item = $dir->read() ){ if( $item != "." && $item != ".." ){ $filelist[] = $item; } } $profiler->setMarker('init'); /******* PHPでのサムネイル作成 *******/ foreach( $filelist as $number => $filename ){ //画像の読み込み $fileurl = "{$dirpath}/{$filename}"; $im_src = imagecreatefromjpeg( $fileurl ); //画像出力ファイル名 $filename = "thumimg_php/{$filename}"; //画像のサイズ取得 $im_src_x = imagesx($im_src); $im_src_y = imagesy($im_src); $width = 100; //画像の比率作成(指定された横幅から縦幅を作成) $height = intval( $im_src_y * ( $width / $im_src_x ) ); //画像を作成する。 $im = @imagecreatetruecolor ( $width , $height ); //画像の縮小 imagecopyresampled ( $im , $im_src , 0 , 0, 0, 0, $width , $height , imagesx( $im_src ) , imagesy( $im_src ) ); //出力 imagejpeg($im , $filename ); //メモリ解放 imagedestroy($im); } $profiler->setMarker('php'); /******* ImageMagick(convert.exe)でのサムネイル作成 *******/ foreach( $filelist as $number => $filename ){ $cmd = " \"{$CONPATH}convert.exe\" {$dirpath}/{$filename} -resize 100x thumimg_imagick/{$filename}"; exec( $cmd ); } $profiler->setMarker('imagick'); /******* ベンチマーク終了 *******/ $profiler->stop(); $time = $profiler->getProfiling(); //$profiler->display(); for( $i = 0 ; $i < count ( $time ) ; $i ++ ){ $time[$i]["name"]; $time[$i]["diff"]; $time[$i]["total"]; $total = $time[$i]["total"]; $w = intval( $time[$i]["diff"] * 70 ); $title .=<<<EOD <tr> <td nowrap style="border:1px solid gray;"> {$time[$i]["name"]} </td> <td style="border:1px solid gray;"> {$time[$i]["diff"]} </td> <td style="border:1px solid gray;"> <img src="bar.gif" width="{$w}" height="15"> </td> </tr> EOD; } echo <<<EOD <h2>PHP と ImageMagick の比較(サムネイル作成)</h2> <hr> イラスト49枚を横幅100pxに縮小保存 <table cellspacing="1" cellpadding="4" style="border:1px solid gray;"> {$title} </table> <br > 数値が低いほうがベター EOD; exit; ?>