PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
本文实例讲述了PHP基于imagick扩展实现合成图片的两种方法。分享给大家供大家参考,具体如下:
方法一:compositeimages
/**
*function:合成图片
*@paramstring$output_url图片保存路径
*@paramstring$img_type图片保存类型
*@paramintegral$line_num每行显示图片数量
*@paramarray$logo_info每张待合成图片的信息(要求所有尺寸统一)
*@paramarray$img_list待合成的图片绝对路径
*
*@returnvoid
*/
publicfunctiongenerate($output_url,$img_type,$line_num,$logo_info,$img_list=array()){
//计算图片有多少行
$lines=ceil(count($img_list)/$line_num);
$bg_width=($logo_info['width']+$logo_info['line_width'])*$line_num;
$bg_height=($logo_info['height']+$logo_info['line_height'])*$lines;
//构建画布
$canvas=newImagick();
$canvas->newimage($bg_width,$bg_height,'white');
$canvas->setimageformat($img_type);
$i=$j=0;
foreach($img_listas$item){
$im=newImagick($item);
$x=$logo_info['line_width']*2+$i*$logo_info['width'];
$y=$logo_info['line_height']*2+$j*$logo_info['height'];
//$canvas->compositeimage($im->getimage(),Imagick::COMPOSITE_OVER,$x,$y);
$canvas->compositeimage($im,$im->getImageCompose(),$x,$y);
if(($i+1)%$line_num===0){
$i=0;
$j++;
}else{
$i++;
}
//unset($im);
$im->destroy();
}
$canvas->writeimage($output_url);
//销毁对象
$canvas->destroy();
}
方法二:combineimages
/**
*function:合成图片
*@paramstring$output_url图片保存路径
*@paramstring$img_type图片保存类型
*@paramintegral$line_num每行显示图片数量
*@paramarray$logo_info每张待合成图片的信息(要求所有尺寸统一)
*@paramarray$img_list待合成的图片绝对路径
*
*@returnvoid
*/
publicfunctiongenerate($output_url,$img_type,$line_num,$logo_info,$img_list=array()){
//计算图片有多少行
$lines=ceil(count($img_list)/$line_num);
$bg_width=($logo_info['width']+$logo_info['line_width'])*$line_num;
$bg_height=($logo_info['height']+$logo_info['line_height'])*$lines;
//构建画布
$canvas=null;
$canvas=newImagick();
$canvas->newimage($bg_width,$bg_height,'white');
$i=$j=0;
foreach($img_listas$item){
$im=null;
$im=newImagick($item);
//$canvas->readImage($item);
$canvas->addimage($im);
$im->clear();
$im->destroy();
}
//$canvas->flattenImages();
$canvas->combineImages(Imagick::CHANNEL_ALL);
$canvas->writeimage($output_url);
//销毁对象
$canvas->clear();
$canvas->destroy();
}
个人认为方法二效率更高
附:windows下面php5.2.17和php5.3.18和php5.4.8各个版本的imagick组件下载
1、PHP5.2.17我安装成功了,用的星外PHP5.2.17直接安装程序,下载imagick版本如下:
点击此处本站下载。
已经包含imagemagick不需要安装任何东西,直接把php_imagick_st-Q16.dll复制到c:\php\ext目录
然后给php.ini扩展里面增加:extension=php_imagick_st-Q16.dll最简单和绿色的方法
ps:还有诸如php_imagick_st-Q8.dll(8色),php_imagick_dyn-Q16.dll(需要安装imagemagick)就完全没必要管他们了
PHP5.2.17本站下载地址:
32位:https://www.nhooo.com/softs/26087.html
64位:https://www.nhooo.com/softs/479475.html
2、PHP5.3.18必须安装imagemagick已经没有可用的单文件dll了
1)官方下载地址:
http://www.imagemagick.org/download/binaries/ImageMagick-6.8.0-4-Q16-windows-dll.exe
2)根据你的php安装模式下载php_imagick
线程安全:
点击此处本站下载。
复制到c:\php\ext目录,增加扩展例如:extension=php_imagick_nts.dll
3、PHP5.4.8 必须安装imagemagick已经没有可用的单文件dll了
1)官方下载地址:
http://www.imagemagick.org/download/binaries/ImageMagick-6.8.0-4-Q16-windows-dll.exe
2)根据你的PHP安装模式下载php_imagick
无线程安全:
点击此处本站下载。
复制到c:\php\ext目录,增加扩展例如:extension=php_imagick.dll
以上安装本人都测试过,安装了重启iis或Apache服务器,然后查看phpinfo看看有没有imagick如果没有的话,请检查权限或者重新做一次。
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP图形与图片操作技巧汇总》、《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》及《PHP数学运算技巧总结》
希望本文所述对大家PHP程序设计有所帮助。