centos安裝php擴展imagick-高性能處理圖片 -开发者知识库

centos安裝php擴展imagick-高性能處理圖片 -开发者知识库,第1张

PHP建圖通常都用GD庫,因為是內置的不需要在服務器上額外安裝插件,所以用起來比較省心,但是如果你的程序主要的功能就是處理圖像,那么就不建議用GD了,因為GD不但低效能而且能力也比較弱,占用的系統資源也頗多,另外GD的creatfrom也有bug,而imagick卻是一個很好的替代品,為此最近把我的一個項目由GD改成了imagick


ImageMagick是一套功能強大、穩定而且開源的工具集和開發包,可以用來讀、寫和處理超過89種基本格式的圖片文件,包括流行的TIFF、JPEG、GIF、 PNG、PDF以及PhotoCD等格式。利用ImageMagick,你可以根據web應用程序的需要動態生成圖片, 還可以對一個(或一組)圖片進行改變大小、旋轉、銳化、減色或增加特效等操作,並將操作的結果以相同格式或其它格式保存,對圖片的操作,即可以通過命令行進行,也可以用C/C 、Perl、Java、PHP、Python或Ruby編程來完成。同時ImageMagick提供了一個高質量的2D工具包,部分支持SVG。ImageMagic的主要精力集中在性能,減少bug以及提供穩定的API和ABI上。
ImageMagick是一個用來創建、編輯、合成圖片的軟件。它可以讀取、轉換、寫入多種格式的圖片。圖片切割、顏色替換、各種效果的應用,圖片的旋轉、組合,文本,直線, 多邊形,橢圓,曲線,附加到圖片伸展旋轉。ImageMagick是免費軟件:全部源碼開放,可以自由使用,復制,修改,發布。支持大多數的操作系統


一、安裝ImageMagick



1、安裝ImageMagick
#wget http://soft.vpser.net/web/imagemagick/ImageMagick-6.7.1-2.tar.gz
#tar zxvf ImageMagick-6.7.1-2.tar.gz
#cd ImageMagick-6.7.1-2/
#./configure --prefix=/usr/local/imagemagick --disable-openmp
#make && make install
#ldconfig


2、測試ImageMagick是否可以正常運行
#/usr/local/imagemagick/bin/convert -version
Version: ImageMagick 6.7.1-2 2016-06-29 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2011 ImageMagick Studio LLC
Features:




二、安裝PHP擴展:imagick


1、安裝PHP擴展:imagick
#wget http://pecl.php.net/get/imagick-3.0.1.tgz
#tar zxvf imagick-3.0.1.tgz
#cd imagick-3.0.1/
#/usr/local/php/bin/phpize
#./configure --with-php-config=/usr/local/php/bin/php-config --with-imagick=/usr/local/imagemagick
#make && make install
#ldconfig


2、php加載imagick擴展
#vi /etc/php.ini
extension_dir = "/usr/lib64/php/modules"
extension="imagick.so"
#:wq! #保存退出


3、重新加載php-fpm
#service php-fpm reload
如果是apache 則 #service httpd restart


4、測試,查看phpinfo信息,如下圖所示:


centos安裝php擴展imagick-高性能處理圖片 -开发者知识库,第2张


5、php代碼測試


<?php
/*
* 圖片壓縮類 重新封裝了Imagick
*
* @version 2014-07-30
* @author andy1219111@163.com
*/
class Imgick_tool{

//Imagick對象實例
public $obj = null;

public function __construct()
{
//判斷是否加載了該擴展
if(!extension_loaded('Imagick'))
{
return false;
}
$this->obj = new Imagick();
}
/*
* png2jpg轉換圖片格式
*
* @param string src_img 源圖片路徑
* @param string dest_img 要生成的圖片的路徑
* @return boolean 轉換成共返回true 否則false
*/
public function png2jpg($src_img,$dest_img)
{
if(!is_object($this->obj))
{
return false;
}
try
{
$this->obj->readImage($src_img);
if($this->obj->writeImage($dest_img))
{
$this->destory();
return $dest_img;
}
return false;
}
catch (ImagickException $e)
{
return false;
}
}

/*
* 去掉圖片的profile信息
*
* @param string src_img 源圖片路徑
* @return string src_img 圖片名稱 否則返回false
*/
public function strip_profile($src_img,$dest_img = '')
{
if(!is_object($this->obj))
{
return false;
}
try
{
$dest_img = empty($dest_img) ? $src_img : $dest_img;
$this->obj->readImage($src_img);
$this->obj->stripImage ();
if($this->obj->writeImage ($dest_img))
{
$this->destory();
return $src_img;
}
return false;
}
catch (ImagickException $e)
{
return false;
}
}

/*
* 設置jpg圖片質量
*
* @param string src_img 源圖片路徑
* @param string dest_img 要生成的圖片的路徑
* @return boolean 轉換成共返回true 否則false
*/
public function set_quality($src_img,$quality = 70,$dest_img = '')
{
if(!is_object($this->obj))
{
return false;
}
try
{
$dest_img = empty($dest_img) ? $src_img : $dest_img;
$this->obj->readImage($src_img);
$this->obj->setImageCompression(Imagick::COMPRESSION_JPEG);
$this->obj->setImageCompressionQuality($quality);
if($this->obj->writeImage($dest_img))
{
$this->destory();
return $dest_img;
}
return false;
}
catch (ImagickException $e)
{
return false;
}
}

/*
* 圖片瘦身
*
* @param string src_img 源圖片路徑
* @param int quality 設置圖片壓縮質量
* @param string dest_img 要生成的圖片的路徑
* @return boolean 轉換成共返回true 否則false
*/
public function slimming($src_img,$quality = 60,$dest_img = '')
{
if(!is_object($this->obj))
{
return false;
}
try
{
$dest_img = empty($dest_img) ? $src_img : $dest_img;
$this->obj->readImage($src_img);
$this->obj->setImageFormat('jpeg');
$this->obj->setImageCompression(Imagick::COMPRESSION_JPEG);
//將圖片的質量降低到原來的60%
$quality = $this->obj->getImageCompressionQuality() * $quality / 100;
$this->obj->setImageCompressionQuality($quality);
$this->obj->stripImage();

if($this->obj->writeImage($dest_img))
{
$this->destory();
return $dest_img;
}
return false;
}
catch (ImagickException $e)
{
return false;
}
}

/*
* 生成縮略圖
*
* @param string src_img 源圖片路徑
* @param int quality 設置圖片壓縮質量
* @param string dest_img 要生成的圖片的路徑
* @return boolean 轉換成共返回true 否則false
*/
public function thump($src_img,$width = 250,$height = '')
{
if(!is_object($this->obj))
{
return false;
}
try
{

$file_info = pathinfo($src_img);
//生成縮略圖名稱
$file_name = substr($file_info['basename'],0,strrpos($file_info['basename'],'.'));
$dest_img = $file_info['dirname'] . '/' . $file_name . '_thump.' . $file_info['extension'];
$this->obj->readImage($src_img);
//計算要獲得縮略圖的高度
$img_width = $this->obj->getImageWidth();
$img_height = $this->obj->getImageHeight();
$dest_height = $img_height * ($width / $img_width);
$this->obj->resizeImage($width, $dest_height, Imagick::FILTER_CATROM, 1, false);
//生成圖片
if($this->obj->writeImage($dest_img))
{
$this->destory();
return $dest_img;
}
return false;
}
catch (ImagickException $e)
{
return false;
}
}

/*
* 釋放資源
*
*/
function destory()
{
if(is_object($this->obj))
{
$this->obj->clear();

$this->obj->destroy();
}
}

}

function resize($image, $width, $height, $crop) {
$imagick = new Imagick();
$imagick->readImageBlob($image);
$w = $imagick->getImageWidth();
$h = $imagick->getImageHeight();
if ($w > $width || $h > $height) {
if ($crop) {
$imagick->cropThumbnailImage($width, $height);
} else {
$imagick->resizeImage($width, $height, Imagick::FILTER_CATROM, 1, true);
}
}
$imagick->setImageFormat('JPEG');
$imagick->setImageCompression(Imagick::COMPRESSION_JPEG);
$a = $imagick->getImageCompressionQuality() * 0.75;
if ($a == 0) {
$a = 75;
}
$imagick->setImageCompressionQuality($a);
$imagick->stripImage();
$blob = $imagick->getImageBlob();
$imagick->clear();
$imagick->destroy();
return $blob;
}

/*
$saveDir 保存地址
$file png圖片地址

*/
function imageToJpg($saveDir,$file){
$saveDir = str_replace ( "\\", "/", $saveDir );
$srcFile=$saveDir.$file;
$srcFileExt= strtolower ( trim ( substr ( strrchr ( $srcFile, '.' ), 1 ) ) );
if($srcFileExt=='jpeg'||$srcFileExt=='jpg'){
return $saveDir.$file;
}
$srcFileName = basename ( $file ,'.'.$srcFileExt);
$dstFile = $saveDir.$srcFileName.".jpg";
$photoSize = GetImageSize($srcFile);
$pw = $photoSize[0];
$ph = $photoSize[1];
$srcImage = true;
if ( stripos( strtolower($srcFile),".gif") ){
//創建圖片
$dstImage = ImageCreateTrueColor( $pw, $ph);
imagecolorallocate($dstImage, 255, 255, 255);
//讀取圖片
$srcImage = ImageCreateFromGif($srcFile);
//合拼圖片
imagecopyresampled($dstImage,$srcImage ,0,0,0,0,$pw,$ph ,$pw,$ph);
//ImageCopyResized($dstImage,$srcImage,0,0,0,0,$pw,$ph,$pw,$ph);
ImageJpeg($dstImage,$dstFile);
imagedestroy($srcImage );
}
if ( stripos( strtolower($srcFile),".png") ){
//創建圖片
$dstImage = ImageCreateTrueColor( $pw, $ph);
imagecolorallocate($dstImage, 255, 255, 255);
//讀取圖片
$srcImage = ImageCreateFromPNG($srcFile);
//合拼圖片
imagecopyresampled($dstImage,$srcImage ,0,0,0,0,$pw,$ph ,$pw,$ph);
ImageJpeg($dstImage,$dstFile);
imagedestroy($srcImage );
}
/*if ( $srcImage == false || stripos( strtolower($srcFile),".jpg") ){
$srcImage = ImageCreateFromJPEG($srcFile);
}*/
if(is_file($srcFile)){
@unlink($srcFile);
}
return $saveDir.$srcFileName.".jpg";
}

imageToJpg('/var/www/html/test/imagick/','e.jpg');

//縮略圖片並壓縮大小
$image = new Imagick('3.jpg');
$image->resizeImage(200,100,Imagick::FILTER_LANCZOS,1);
//$image->cropImage($width_2, $height_2, $x, $y);
$image->setCompression(Imagick::COMPRESSION_JPEG);
$image->setImageCompressionQuality(82);
$image->writeImage('32.jpg');
$image->destroy();

$thumb = new Imagick();
$thumb->readImage('3.jpg');
$thumb->writeImage('test.jpg');
$thumb->clear();
$thumb->destroy();

$imagick=new Imgick_tool();
$imagick->png2jpg('fangao.png','fangao.jpg');


//$a=resize('3.jpg',200,100,0);

?>

參考:http://blog.csdn.net/andy1219111/article/details/38335987

最佳答案:

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复