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


Posted in PHP onNovember 14, 2017

本文实例讲述了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位:https://3water.com/softs/26087.html

64位:https://3water.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 相关文章推荐
如何使用脚本模仿登陆过程
Nov 22 PHP
探讨捕获php错误信息方法的详解
Jun 09 PHP
Php output buffering缓存及程序缓存深入解析
Jul 15 PHP
php中的mongodb select常用操作代码示例
Sep 06 PHP
php生成随机颜色的方法
Nov 13 PHP
PHP使用array_multisort对多个数组或多维数组进行排序
Dec 16 PHP
PHP 5.6.11 访问SQL Server2008R2的几种情况详解
Aug 08 PHP
PHP对象实例化单例方法
Jan 19 PHP
PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
May 03 PHP
PHP curl 或 file_get_contents 获取需要授权页面的方法
May 05 PHP
深入解析Laravel5.5中的包自动发现Package Auto Discovery
Sep 13 PHP
laravel添加前台跳转成功页面示例
Oct 22 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
Nov 14 #PHP
PHP中递归的实现实例详解
Nov 14 #PHP
利用Homestead快速运行一个Laravel项目的方法详解
Nov 14 #PHP
PHP对称加密算法(DES/AES)类的实现代码
Nov 14 #PHP
浅谈PHP中如何实现Hook机制
Nov 14 #PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
Nov 14 #PHP
PHP封装的XML简单操作类完整实例
Nov 13 #PHP
You might like
Sublime里直接运行PHP配置方法
2014/11/28 PHP
PHP使用递归算法无限遍历数组示例
2017/01/13 PHP
建立良好体验度的Web注册系统ajax
2007/07/09 Javascript
jQuery select操作控制方法小结
2010/05/26 Javascript
jQuery :nth-child前有无空格的区别分析
2011/07/11 Javascript
JavaScript中Date.toSource()方法的使用教程
2015/06/12 Javascript
js获取图片宽高的方法
2015/11/25 Javascript
简单对比分析JavaScript中的apply,call与this的使用
2015/12/04 Javascript
详解iframe与frame的区别
2016/01/13 Javascript
javascript Promise简单学习使用方法小结
2016/05/17 Javascript
Nodejs进阶之服务端字符编解码和乱码处理
2017/09/04 NodeJs
vue-router2.0 组件之间传参及获取动态参数的方法
2017/11/10 Javascript
学习Vue组件实例
2018/04/28 Javascript
如何从0开始用node写一个自己的命令行程序
2018/12/29 Javascript
puppeteer库入门初探
2019/01/09 Javascript
VUE写一个简单的表格实例
2019/08/06 Javascript
通过实例了解JS执行上下文运行原理
2020/06/17 Javascript
python实现从web抓取文档的方法
2014/09/26 Python
实例说明Python中比较运算符的使用
2015/05/13 Python
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
2018/01/04 Python
Python使用matplotlib实现的图像读取、切割裁剪功能示例
2018/04/28 Python
Django项目中用JS实现加载子页面并传值的方法
2018/05/28 Python
在Python文件中指定Python解释器的方法
2019/02/18 Python
用Python实现校园通知更新提醒功能
2019/11/23 Python
Python完全识别验证码自动登录实例详解
2019/11/24 Python
django 外键创建注意事项说明
2020/05/20 Python
opencv 图像滤波(均值,方框,高斯,中值)
2020/07/08 Python
Python生成器传参数及返回值原理解析
2020/07/22 Python
CSS3打造磨砂玻璃背景效果
2016/09/28 HTML / CSS
美国廉价机票预订网站:Cheapfaremart
2018/04/28 全球购物
I.T集团香港官方商城:ITeSHOP.com Hong Kong
2019/02/15 全球购物
厕所文明标语
2014/06/11 职场文书
团党委领导干部党的群众路线教育实践活动个人对照检查材料思想汇
2014/10/05 职场文书
人口与计划生育责任书
2015/05/09 职场文书
学校教学管理制度
2015/08/06 职场文书
导游词之日月潭
2019/11/05 职场文书