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 相关文章推荐
图书管理程序(三)
Oct 09 PHP
在PHP中使用Sockets 从Usenet中获取文件
Jan 10 PHP
PHP 使用MySQL管理Session的回调函数详解
Jun 21 PHP
如何在php中正确的使用json
Aug 06 PHP
支持生僻字且自动识别utf-8编码的php汉字转拼音类
Jun 27 PHP
PHP将回调函数作用到给定数组单元的方法
Aug 19 PHP
wamp服务器访问php非常缓慢的解决过程
Jul 01 PHP
PHP工程师VIM配置分享
Dec 15 PHP
WordPress中注册菜单与调用菜单的方法详解
Dec 18 PHP
PHP实现可自定义样式的分页类
Mar 29 PHP
PHP使用Redis替代文件存储Session的方法
Feb 15 PHP
Yii2.0建立公共方法简单示例
Jan 29 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
elgg 获取文件图标地址的方法
2010/03/20 PHP
PHP初学者最感迷茫的问题小结
2010/03/27 PHP
CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)
2016/11/22 PHP
phpstorm激活码2020附使用详细教程
2020/09/25 PHP
JavaScript 常用函数
2009/12/30 Javascript
ExtJS 工具栏 分页事件参数
2010/03/05 Javascript
js关闭当前页面(窗口)的几种方式总结
2013/03/05 Javascript
Google Map V3 绑定气泡窗口(infowindow)Dom事件实现代码
2013/04/26 Javascript
js图片预加载示例
2014/04/30 Javascript
js中substring和substr的定义和用法
2014/05/05 Javascript
JQuery中$.each 和$(selector).each()的区别详解
2015/03/13 Javascript
js验证真实姓名与身份证号,手机号的简单实例
2016/07/18 Javascript
基于BootStrap栅格栏系统完成网站底部版权信息区
2016/12/23 Javascript
对angular4子路由&辅助路由详解
2018/10/09 Javascript
layui+jquery支持IE8的表格分页方法
2019/09/28 jQuery
Vue-cli3多页面配置详解
2020/03/22 Javascript
Openlayers3实现车辆轨迹回放功能
2020/09/29 Javascript
Python yield 使用方法浅析
2017/05/20 Python
python提取具有某种特定字符串的行数据方法
2018/12/11 Python
Django-Model数据库操作(增删改查、连表结构)详解
2019/07/17 Python
python list多级排序知识点总结
2019/10/23 Python
Python文字截图识别OCR工具实例解析
2020/03/05 Python
python网络编程:socketserver的基本使用方法实例分析
2020/04/09 Python
使用python创建Excel工作簿及工作表过程图解
2020/05/27 Python
HTML5的自定义属性data-*详细介绍和JS操作实例
2014/04/10 HTML / CSS
详解canvas多边形(蜘蛛图)的画法示例
2018/01/29 HTML / CSS
Blue Nile中国官网:全球知名的钻石和珠宝网络零售商
2020/03/22 全球购物
九年级科学教学反思
2014/01/29 职场文书
人力资源部经理岗位职责规定
2014/02/23 职场文书
党委书记群众路线对照检查材料思想汇报
2014/10/04 职场文书
谢师宴答谢词
2015/01/05 职场文书
2015年乡镇纪委工作总结
2015/05/26 职场文书
大学生社区义工服务心得体会
2016/01/22 职场文书
干货:如何写好工作总结报告!
2019/05/10 职场文书
JS新手入门数组处理的实用方法汇总
2021/04/07 Javascript
Python爬虫之爬取哔哩哔哩热门视频排行榜
2021/04/28 Python