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 相关文章推荐
PHP编码规范-php coding standard
Mar 16 PHP
浅谈PHP 闭包特性在实际应用中的问题
Oct 30 PHP
认识并使用PHP超级全局变量
Jan 26 PHP
PHP中通过加号合并数组的一个简单方法分享
Jan 27 PHP
nginx+php-fpm配置文件的组织结构介绍
Nov 07 PHP
解析PHP 使用curl提交json格式数据
Jun 29 PHP
检查用户名是否已在mysql中存在的php写法
Jan 20 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十四)
Jun 26 PHP
php运行时动态创建函数的方法
Mar 16 PHP
以文件形式缓存php变量的方法
Jun 26 PHP
使用PHP进行微信公众平台开发的示例
Aug 21 PHP
Laravel修改验证提示信息为中文的示例
Oct 23 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
德生1994机评
2021/03/02 无线电
php网页后退不再出现过期
2007/03/08 PHP
ThinkPHP标签制作教程
2014/07/10 PHP
PHP简单实现“相关文章推荐”功能的方法
2014/07/19 PHP
详解HTTP Cookie状态管理机制
2016/01/14 PHP
PHP 实现从数据库导出到.csv文件方法
2017/07/06 PHP
浅谈Laravel核心解读之Console内核
2018/12/02 PHP
PHP实现函数内修改外部变量值的方法示例
2018/12/28 PHP
PHP微信网页授权的配置文件操作分析
2019/05/29 PHP
laravel使用数据库测试注意事项
2020/04/10 PHP
根据对象的某一属性进行排序的js代码(如:name,age)
2010/08/10 Javascript
动态加载图片路径 保持JavaScript控件的相对独立性
2010/09/06 Javascript
通过action传过来的值在option获取进行验证的方法
2013/11/14 Javascript
js鼠标点击图片切换效果实现代码
2015/11/19 Javascript
jQuery元素属性操作实例(设置、获取及删除元素属性)
2016/09/08 Javascript
jQuery中的deferred对象和extend方法详解
2017/05/08 jQuery
利用adb shell和node.js实现抖音自动抢红包功能(推荐)
2018/02/22 Javascript
微信小程序定位当前城市的方法
2018/07/19 Javascript
angular4自定义表单控件[(ngModel)]的实现
2018/11/23 Javascript
详解原生JS动态添加和删除类
2019/03/26 Javascript
nodejs实现日志读取、日志查找及日志刷新的方法分析
2019/05/20 NodeJs
JS 封装父页面子页面交互接口的实例代码
2019/06/25 Javascript
Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解
2019/08/07 Javascript
微信小程序基于高德地图查找位置并显示文字
2019/10/30 Javascript
js 使用ajax设置和获取自定义header信息的方法小结
2020/03/12 Javascript
小程序富文本提取图片可放大缩小
2020/05/26 Javascript
Python 的描述符 descriptor详解
2016/02/27 Python
python数据结构之线性表的顺序存储结构
2018/09/28 Python
Python实现对word文档添加密码去除密码的示例代码
2020/12/29 Python
德国自然时尚和有机产品购物网站:Waschbär
2019/05/29 全球购物
英国女性化妆品收纳和家具网站:Beautify
2019/12/07 全球购物
四种会话跟踪技术
2015/05/20 面试题
毕业生找工作的自我评价
2013/10/18 职场文书
应届毕业生通用的自荐书范文
2014/02/07 职场文书
党员反邪教心得体会
2016/01/15 职场文书
Windows11性能真的上涨35%? 桌面酷睿i9实测结果公开
2021/11/21 数码科技