PECL::IMagick imagemagickを使った動的画像変換

PHP::PECL

PECL::imagick
http://pecl.php.net/package/imagick
ImageMagickGraphicsMagickを取り扱う強力な関数。
execを使うよりも安定している感じ。

ImageMagickの主な使い方は。。。
まぁ案件によりけりでしょうけど、
「画像サイズ変更」「フォーマット変更」
だと思う。
GD使えばと言うのもあるがそれはまぁ、おいておいて。

ソースコードはこんな感じ

// PNGファイルをJPEGファイルに変換するとする
// PNG : sample.png
// JPEG: sample.jpg

// Imagickを使ってファイルを開く
$handle = imagick_readimage( "sample.png" ) ;     // ファイル読み込み
imagick_convert( $handle, "JPG" ) ; // フォーマットの指定

// リサイズ
if ( !imagick_resize( $handle, $width, $height, IMAGICK_FILTER_UNKNOWN, 0 ) ) 
   error( $handle );                                 // 終了

// 書き込み
if ( !imagick_writeimage( $handle, "sample.jpg") )
   error( $handle );                                 // 終了

以下のコマンドは次のコードで等価になります。

convert +profile '*' -resize $width -quality $i $org_image $target_image
list($org_width, $org_height, $org_type, $org_attr) 
 = getimagesize($org_image); // オリジナルデータの取得
$handle = imagick_readimage($org_image); 
imagick_profile($handle, "*", IMAGICK_PROFILE_OWN); // プロファイルの設定
imagick_convert($handle, "JPEG");  // JPEGに変換
imagick_set_image_quality($handle, $i);  // クォリティの設定
imagick_resize($handle, $width, $org_height, IMAGICK_FILTER_UNKNOWN, 1); // サイズの変更 
imagick_writeimage($handle, $target_image); // ファイルの書き出し

GDを使っているのをあえてImageMagickにする必要はないが、
すでにImageMagickを使っているのをexecからPECL::imagickにするというメリットは大きいと思う。
セーフモードの対象からはずれるとか、
オーバーヘッドが軽減できるとか、
execが気持ち悪いとか。。。popenを使えばいいかな。。。大差ないな。。。

デメリット

ハンドラを取りまわすような感じでオブジェクト指向的に使えない。
ImageMagickの最新版が対応バージョンになっていないぽい。
CGI版CLI版は使えない。


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Third Project
証券会社ランキング比較