PHP擴展MagickWand

簡介

MagickWand 是PHP的一個擴展程序,經過它創建起與ImageMagick的交互,進行圖片的處理。它是默認的GD圖象函數庫的絕佳替代方案。從安全性和易用性來講,在PHP中使用MagickWand比使用命令行ImageMagick要安全快捷的多。另外 imagick也可用於PHP中做爲ImageMagick的替代方案。

MagickWand 有兩種形式:

一、只是創建與ImageMagick的交互,這種狀況必須先安裝ImageMagick,優勢是擴展程序文件小(通常幾百K),能夠快速升級ImageMagick版本,不過WINDOWS臨時目錄須要特殊權限。
二、擴展程序自己包含了ImageMagick,優勢是不須要額外安裝ImageMagick,臨時目錄不須要特殊權限,但擴展程序文件比較大(通常4M以上)。

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_q16_st.dll) php


另附: html

ImageMagick和magickwand是什麼?如何加裝?

ImageMagick是一個用於圖象處理的程序 能夠運行在windows下和linux下 他的功能很是強大 能進行大小、格式、水印、標籤等各類圖象處理 好比在Linux下執行convert --help 便可查看ImageMagick的一部分功能說明 在PHP程序中,也能夠調用這個ImageMagick程序 可是,調用的形式是經過php的module來實現的 這個module的名稱叫作magickwand 不少程序員改用magickwand而再也不使用php內置的gd圖象函數庫 ImageMagick功能很是強大,而且在Linux的發行版的光盤中都包含了安裝的rpm 可是系統上自帶的ImageMagick的版本一般很老,沒法和magickwand共存 因此只能自行安裝一個新的 而編譯magicwand也是比較複雜的 下邊會詳細講述 環境準備 ------------------------ 編譯php的magickwand模塊環境上必須自己已經裝有php (由於一會要用php裏邊的phpize程序) 下載最新版的ImageMagick(版本大於6.2) 這是由於Redhat自帶的版本是5.x,不能搭配magickwand使用 因此只能本身編譯一個6.2.x版原本用了 而且,不光是開發環境須要這個包,在實際運行的服務器上 也要手工編譯一個ImageMagick-6.2.x版本才能夠。 從ImageMagick的官方站下載源碼包(用google的搜索第一項就是官方站) 解壓縮後配置安裝 ./configure LDFLAGS="-L/usr/lib" CPPFLAGS="-I/usr/include" --prefix=/usr/local/ImageMagick --enable-shared --enable-lzw make make install 則6.2版本的ImageMagick安裝完成 下載 ------------------------ 從magickwand的官方站下載源碼包(用google的搜索第一項就是官方站) 從php.net下載php源碼 將php源碼解壓縮,把magickwand也解壓縮,放到php源碼下的ext/目錄下 例如/root/php-4.4.2/ext/magickwand 整合Module ------------------------ 爲何要整合module?這是由於php內置的圖象處理函數庫是gd,而不是magickwand 在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模塊文件,便於給其餘服務器加裝 而後編譯 make 等待幾分鐘便可完成了 獲取模塊 ------------------------ 而後就能夠去php的源碼目錄中找剛纔編譯出來的so文件了 find /root/php-4.4.2 -name 'magickwand.so' 把這個文件copy出來,便可放置到別的服務器上使用了 cp ./module/magickwand.so /root 生產環境上安裝 ------------------------ 在實際運行的服務器上,要先按照前邊所述的方法 編譯一個6.2.x版本的ImageMagick並安裝到服務器上 而後把magickwand.so複製到php的模塊目錄裏邊 好比對應as4版本的php:/usr/local/php4/lib/php 而後在php.ini加入extenstion=magickwand.so 好比對應as4的版本的php.ini在/usr/local/php4/etc/php.ini 保存退出便可,無須從新啓動任何服務。
相關文章
相關標籤/搜索