PHP擴充MagickWand 是什嗎?如何加裝?

來源:互聯網
上載者:User
PHP擴充MagickWand

PHP 擴充 MagickWand ImageMagick
簡介

MagickWand 是PHP的一個擴充程式,通過它建立起與ImageMagick的互動,進行圖片的處理。它是預設的GD圖象函數庫的絕佳替代方案。從安全性和易用性來說,在PHP中使用MagickWand比使用命令列ImageMagick要安全快捷的多。另外 imagick也可用於PHP中作為ImageMagick的替代方案。

MagickWand 有兩種形式:

1、只是建立與ImageMagick的互動,這種情況必須先安裝ImageMagick,優點是擴充程式檔案小(一般幾百K),可以快速升級ImageMagick版本,不過WINDOWS臨時目錄需要特殊許可權。
2、擴充程式本身包含了ImageMagick,優點是不需要額外安裝ImageMagick,臨時目錄不需要特殊許可權,但擴充程式檔案比較大(一般4M以上)。

MagickWand 預設並沒有在PHP的安裝包裡,需要去PHP網站上下載,並在PHP.INI中開啟此擴充。

程式碼範例

    // 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 );

在圖片上寫文字:

    // 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);    } 

裁切:

    // 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);    }

旋轉圖片:

    // 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 );

調整大小:

    // 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 );

銳利化:

    // 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)

另附:

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
儲存退出即可,無須重新啟動任何服務。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.