PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
本文实例讲述了php基于imagick扩展实现合成图片的两种方法。分享给大家供大家参考,具体如下:
方法一:compositeimages
/** * function: 合成图片 * @param string $output_url 图片保存路径 * @param string $img_type 图片保存类型 * @param integral $line_num 每行显示图片数量 * @param array $logo_info 每张待合成图片的信息(要求所有尺寸统一) * @param array $img_list 待合成的图片绝对路径 * * @return void */ public function generate($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 = new imagick(); $canvas->newimage($bg_width, $bg_height, 'white'); $canvas->setimageformat($img_type); $i = $j = 0; foreach ($img_list as $item) { $im = new imagick($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: 合成图片 * @param string $output_url 图片保存路径 * @param string $img_type 图片保存类型 * @param integral $line_num 每行显示图片数量 * @param array $logo_info 每张待合成图片的信息(要求所有尺寸统一) * @param array $img_list 待合成的图片绝对路径 * * @return void */ public function generate($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 = new imagick(); $canvas -> newimage($bg_width, $bg_height, 'white'); $i = $j = 0; foreach ($img_list as $item) { $im = null; $im = new imagick($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位:
64位:
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程序设计有所帮助。
下一篇: PS制作漂亮的折纸效果的云朵雨滴图案
推荐阅读
-
PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
-
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
-
php imagick 扩展合成图片的两张方法
-
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
-
PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
-
PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法_php技巧
-
PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法_php技巧
-
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
-
PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法,_PHP教程
-
PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法_PHP