php有一款插件叫做imagemagick,功能很強大,提供了圖片的很多操作,圖片剪切、壓縮、合并、插入文本、背景色透明等。并且有api方法調(diào)用和命令行操作兩種方式,如果只是簡單處理的話建議api方法調(diào)用,如果是很復(fù)雜的操作建議服務(wù)器端搭shell命令行操作,因為api方法調(diào)用同操作對比命令行他更吃內(nèi)存,并且效率沒有命令行那么高。

本文章就對于這些常見操作進行介紹說明

首先要提一聲的時候每次通過imageMagic處理圖片都會new一個對象出來,當(dāng)圖片處理好之后最好是把這個對象給銷毀,它會占用cpu和內(nèi)存,如果你不在乎這些小細節(jié)的話就當(dāng)做我沒有說,接下來進入正題。

圖片寬高壓縮:通過調(diào)用api中的 thumbnailImage 方法,可以實現(xiàn)圖片寬高設(shè)置,這個操作不會影響圖片的質(zhì)量,是同大小壓縮。

代碼如下

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

  =  \Imagick( '圖片路徑' ->thumbnailImage( '圖片高','圖片寬' ("Content-Type: image/{->getImageFormat()}"  ;

 

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

圖片存儲大小壓縮:通過調(diào)用api中的 setImageCompressionQuality 方法,可以實現(xiàn)圖片存儲大小設(shè)置,但是后帶參數(shù)越小那么圖片清晰度越差,但是圖片存儲大小會越小那么web加載的時候就越快,壓縮率請根據(jù)實際情況進行調(diào)整。

代碼如下

1 code = new \Imagick( '圖片路徑' );2 $code->setImageCompressionQuality('縮放比例');3 header("Content-Type: image/{$image->getImageFormat()}");4 echo $image->getImageBlob( );

圖片合并: 通過imageMagick可以實現(xiàn)多個圖片合并到一張圖片中,但是在合并的時候需要根據(jù)被覆蓋圖片的高和寬來確定覆蓋圖片的xy坐標(biāo),獲取被覆蓋圖片的高和寬可以通過方法getImageGeometry來獲取圖片屬性,然后得到高和寬,然后進行定位計算,下邊的代碼是將覆蓋圖片水平、垂直居中。

代碼如下

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

 1  $code = new \Imagick( '被覆蓋圖片路徑'); 2 $codePro = $code->getImageGeometry(); 3 $codeWidth = $codePro['width']; 4 $codeHeight = $codePro['height']; 5  6 $codeLogo = new \Imagick( '覆蓋圖片路徑' ); 7 $codeLogo->thumbnailImage(300,300); 8 $codeLogo->roundCorners( 300, 300 ); // radio 圓角處理 9 $code->compositeImage( $codeLogo, \imagick::COMPOSITE_DEFAULT , ( $codeWidth - 300)/2, ( $codeHeight - 300 )/2 );10 header("Content-Type: image/{$image->getImageFormat()}");11 echo $image->getImageBlob( );

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

插入文本:插入文本你需要指定字體文件和字體位置,之后將你的文字塞到圖片上去,你可以通過imageMagick對你的文字進行大小、字體、顏色進行調(diào)整,并且當(dāng)你塞到圖片的時候可以通過Imagick::GRAVITY_NORTH直接將文字定位為水平居中。

代碼如下

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

 1 $image = new \Imagick( '圖片路徑' ); 2 $draw = new \ImagickDraw(); 3 $draw->setFontSize( '字體大小' ); 4 $draw->setTextKerning( 1 ); // 設(shè)置文件間距 5 $draw->setFont( '字體庫路徑' ); 6 $draw->setFontWeight( 100 ); // 字體粗體 7 $draw->setFillColor( '#434343' ); // 字體顏色 8 $draw->setFontFamily( "Palatino" ); 9 $draw->setGravity( \Imagick::GRAVITY_NORTH );10 $image->annotateImage( $draw, 0, 840, 0, '文本' ) ;11 header("Content-Type: image/{$image->getImageFormat()}");12 echo $image->getImageBlob( );

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

背景色透明:這個網(wǎng)上查了很多資料,在這里不得不吐槽一下,php的imageMagickapi文檔真難看,看來看去也看不出所以然,功夫不負(fù)有心人,最終做出來了,原理就是把圖片背景顏色設(shè)置為透明色,api方法是 transparentPaintImage 后帶四個參數(shù),按照順序分別是 目標(biāo)顏色,透明度,擦邊值,是否全部渲染,主要說明一下目標(biāo)顏色,這個參數(shù)需要是色調(diào)值 rgba(238, 238, 238),而不是 white、black 這樣的字符串。

代碼如下

1 $code = new \Imagick( '圖片路徑' );2 $code->setimageformat('png');3 $code->transparentPaintImage(new \ImagickPixel( '目標(biāo)顏色' ), 0, '10', 0);4 header("Content-Type: image/{$image->getImageFormat()}");5 echo $image->getImageBlob( );

 

本文章為原創(chuàng),上邊提供的所有方法都是本人測試通的,創(chuàng)作不易,如果轉(zhuǎn)載請注明文章出處。

http://www.cnblogs.com/hbyzs/p/7117380.html