首页 > 语言 > PHP > 正文

PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】

2024-05-05 00:01:06
字体:
来源:转载
供稿:网友

本文实例讲述了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)就完全没必要管他们了

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教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选