PHP拡張MagickWand


概要
MagickWandはPHPの拡張プログラムで、ImageMagickとのインタラクションを確立し、画像の処理を行う.これはデフォルトのGDイメージ関数ライブラリの絶好の代替案です.セキュリティと使いやすさから言えば、PHPでMagickWandを使うのはコマンドラインImageMagickを使うよりずっと安全で速いです.さらにimagickはPHPにおいてImageMagickの代替案としても用いられる.
MagickWandには2つの形式があります.
1、ImageMagickとのインタラクションを確立するだけで、この場合はまずImageMagickをインストールしなければならない.利点は拡張プログラムファイルが小さい(一般的に数百K)ことで、ImageMagickバージョンを迅速にアップグレードできるが、WINDOWS一時ディレクトリには特殊な権限が必要である.
2、拡張プログラム自体にImageMagickが含まれている.利点は、ImageMagickを追加でインストールする必要がなく、一時ディレクトリに特別な権限は必要ないが、拡張プログラムファイルは比較的大きい(一般的に4 M以上).
MagickWandは、PHPのインストールパッケージにデフォルトではありません.PHPサイトでダウンロードし、PHP.INIでこの拡張子を開く必要があります.
コードの例
<?php
    // convert flower.jpg -quality 80% flower_quality.jpg
    $resource = NewMagickWand();
    MagickReadImage( $resource, 'small_flower.jpg' );
    MagickSetFormat($resource, 'JPG');
    MagickSetImageCompression($resource, MW_JPEGCompression);
    MagickSetImageCompressionQuality($resource, 80.0);
    header( 'Content-Type: image/gif' );
    MagickEchoImageBlob( $resource );
?>

画像に文字を書きます.
<?php
    // convert flower.jpg -font courier -fill white -pointsize 20 -annotate +50+50 Flower flower_annotate1.jpg
     
    $resource = NewMagickWand();
    $dwand = NewDrawingWand();
    $pwand = NewPixelWand();
     
    PixelSetColor($pwand, "white");
    DrawSetFont($dwand, "/usr/share/fonts/default/TrueType/cour.ttf");//    
    DrawSetFontSize($dwand, 20);
    DrawSetFillColor($dwand, $pwand);
     
    DrawSetGravity($dwand, MW_SouthGravity);
     
    MagickReadImage( $resource, 'small_flower.jpg' );
     
    if( MagickAnnotateImage( $resource, $dwand, 0, 0, 0, "Flower" ) ){
        header( 'Content-Type: image/gif' );
        MagickEchoImageBlob( $resource );
    }else{
        echo MagickGetExceptionString($resource);
    }
 
?>

裁断:
<?php
    // convert flower.jpg -crop 128×128+50+50 flower_crop.jpg
    $resource = NewMagickWand();
    MagickReadImage( $resource, 'small_flower.jpg' );
    if( MagickCropImage( $resource, 128, 128, 50, 50 ) ){
    header( 'Content-Type: image/gif' );
        MagickEchoImageBlob( $resource );
    }else{
        echo MagickGetExceptionString($resource);
    }
?>

画像を回転:
<?php
    // convert flower.jpg -rotate 45 flower_rotate45.jpg
    $resource = NewMagickWand();
    MagickReadImage( $resource, 'small_flower.jpg' );
    MagickRotateImage( $resource, null, 45 );
    header( 'Content-Type: image/gif' );
    MagickEchoImageBlob( $resource );
?>

サイズ変更:
<?php
    // convert flower_original.jpg -resize 640×480 flower.jpg
    $resource = NewMagickWand();
    MagickReadImage( $resource, 'small_flower.jpg' );
    MagickResizeImage( $resource, 100, 100, MW_QuadraticFilter, 1.0 );
    header( 'Content-Type: image/gif' );
    MagickEchoImageBlob( $resource );
?>

シャープ:
<?php
    // convert flower.jpg -unsharp 1.5×1.0+1.5+0.02 flower_unsharp.jpg
    $resource = NewMagickWand();
    MagickReadImage( $resource, 'small_flower.jpg' );
    MagickUnsharpMaskImage( $resource, 1.5, 1.0, 1.5, 0.02 );
    header( 'Content-Type: image/gif' );
    MagickEchoImageBlob( $resource );
?>

関連リンクMagickWand For PHP(Windows+Patch)MagickWand For PHP Manual MagickWand for PHP/Windows(php_magickwand_q 16_st.dll)
追加:
ImageMagickとmagickwandとは何ですか?どのように装着しますか?ImageMagickは画像処理のためのプログラムです
Windowsの下とlinuxの下で実行できます
彼の機能は非常に強い.
サイズ、フォーマット、透かし、ラベルなどの各種画像処理が可能
例えばLinuxでconvert--helpを実行します
ImageMagickの機能の一部を表示できます.
PHPプログラムでは、このImageMagickプログラムを呼び出すこともできます
しかし,呼び出しの形式はphpのmoduleによって実現される.
このmoduleの名前はmagickwandです
多くのプログラマーはphpに組み込まれたgdイメージ関数ライブラリを使用せずにmagickwandを変更します.
ImageMagickは非常に強力で、Linuxのリリース版のディスクにインストールされたrpmが含まれています.
しかし、システムに付属しているImageMagickのバージョンは通常古く、magickwandと共存できません.
新しいものを自分でインストールするしかありません
magicwandのコンパイルも複雑です
次は詳しくお話しします
環境準備
------------------------
phpをコンパイルするmagickwandモジュール環境には、phpがすでにインストールされている必要があります.
(あとでphpの中のphpizeプログラムを使うので)
最新版ImageMagickをダウンロード(バージョン6.2より大きい)
これはRedhatが持っているバージョンが5.xで、magickwandと組み合わせて使用できないためです.
だから自分で6.2.x版を1つコンパイルするしかありません.
そして、開発環境だけでなく、実際に稼働しているサーバ上で
ImageMagick-6.2.xバージョンも手動でコンパイルする必要があります.
ImageMagickの公式サイトからソースパッケージをダウンロード(Googleでの検索1つ目は公式サイト)
解凍後のインストールの構成
./configure
LDFLAGS="-L/usr/lib"CPPFLAGS="-I/usr/include"
--prefix=/usr/local/ImageMagick
--enable-shared
--enable-lzw
メーク
make install
バージョン6.2のImageMagickインストールが完了しました
ダウンロード
------------------------
magickwandの公式サイトからソースパッケージをダウンロード(googleの検索で1つ目は公式サイト)
php.netからphpソースをダウンロード
phpソースコードを解凍し、magickwandも解凍し、phpソースコードの下のext/ディレクトリの下に置く
例えば/root/php-4.4.2/ext/magickwand
統合モジュール
------------------------
なぜmoduleを統合するのですか?これはphpに組み込まれた画像処理関数ライブラリがmagickwandではなくgdであるためである.
phpの構成スクリプトではまったく見えません
たとえばphpのソースコードルートディレクトリでは、次のようになります.
cd/root/php-4.4.2
実行./configure--help|grep magickwand
magickwandに関する情報がまったく検索されていないことがわかります
直接コンパイルではmagickwandモジュールのサポートは得られません
だから、magickwandのソースコードをphpのsource treeに手動で追加する必要があります.
configureスクリプトを再生成してコンパイルします
ディレクトリcd/root/php-4.4.2/ext/magickwandへ
phpizeの実行
phpizeというコマンドはphpパッケージ自体に含まれています.もしこの機械にphpが入っていなければ、このコマンドは実行できません.
(phpがインストールされているサーバにプログラムをコンパイルする理由です)
phpのソースルートに戻ります
cd/root/php-4.4.2
古いconfigureファイルを削除
rm ./configure
新しいconfigureファイルの生成
./buildconf --force
この時phpソースディレクトリの下で、新しいconfigureスクリプトが誕生しました.
このスクリプトでphpをコンパイルしてmagickwandモジュールを開く
実行./configure--help|grep magickwandには、次のように表示されます.
--with-magickwand=DIR Include Magickwand support
これはphpの構成コンパイルを行うと、このモジュールを有効にすることができることを示しています.
コンパイルの設定
------------------------
phpを構成し、パラメータを使用します.
./configure
--enable-shared
--with-magickwand=shared,/usr/local/ImageMagick
--enable-module=shared,magickwand
ここでenable-module方式を用いるのはsoモジュールファイルを取得するためであり,他のサーバへのマウントを容易にするためである.
そしてコンパイル
メーク
数分待って完成です
モジュールの取得
------------------------
それからphpのソースディレクトリに行ってさっきコンパイルしたsoファイルを探すことができます
find/root/php-4.4.2 -name 'magickwand.so'
このファイルをコピーすると、別のサーバに置いて使用できます.
cp ./module/magickwand.so/root
生産環境への設置
------------------------
実際に稼働しているサーバでは、先に述べた方法に従います.
6.2.xバージョンのImageMagickをコンパイルしてサーバにインストール
magickwand.soをphpのモジュールディレクトリにコピーします
例えばas 4バージョンに対応するphp:/usr/local/php 4/lib/php
php.iniでextensition=magickwand.soを追加
例えばas 4のバージョンに対応するphp.iniは/usr/local/php 4/etc/php.ini
サービスを再起動する必要がなく、終了を保存します.