centos安装php扩展imagick-高性能处理图片

来源:互联网 发布:架构师和程序员的区别 编辑:程序博客网 时间:2024/05/29 13:11

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信息,如下图所示:




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 0
原创粉丝点击