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 session
Oct 28 PHP
php初始化对象和析构函数的简单实例
Mar 11 PHP
php使用curl和正则表达式抓取网页数据示例
Apr 13 PHP
PHP列出MySQL中所有数据库的方法
Mar 12 PHP
php将字符串随机分割成不同长度数组的方法
Jun 01 PHP
win10环境PHP 7 安装配置【教程】
May 09 PHP
thinkPHP中验证码的简单实现方法
Dec 05 PHP
mac系统下安装多个php并自由切换的方法详解
Apr 21 PHP
PHP批量删除jQuery操作
Jul 23 PHP
Linux下 php7安装redis的方法
Nov 01 PHP
PHP微信网页授权的配置文件操作分析
May 29 PHP
PHP使用非对称加密算法RSA
Apr 21 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
php正则
2006/07/07 PHP
PHP URL地址获取函数代码(端口等) 推荐
2010/05/15 PHP
PHP的一个基础知识 表单提交
2011/07/04 PHP
关于PHP结束标签的使用细节探讨及联想
2013/03/04 PHP
PHP curl使用实例
2015/07/02 PHP
php+html5+ajax实现上传图片的方法
2016/05/14 PHP
PHP获取访问页面HTTP状态码的实现代码
2016/11/03 PHP
Laravel实现ApiToken认证请求
2019/10/14 PHP
收集的网上用的ajax之chat.js文件
2007/04/08 Javascript
一个选择最快的服务器转向代码
2009/04/27 Javascript
js网页右下角提示框实例
2014/10/14 Javascript
jQuery中的jQuery()方法用法分析
2014/12/27 Javascript
asp.net+js实现金额格式化
2015/02/27 Javascript
jQuery常用的一些技巧汇总
2016/03/26 Javascript
jQuery绑定自定义事件的魔法升级版
2016/06/30 Javascript
学习掌握JavaScript中this的使用技巧
2016/08/29 Javascript
Vue 过渡实现轮播图效果
2017/03/27 Javascript
Vue.js实现文章评论和回复评论功能
2020/05/30 Javascript
利用JS做网页特效_大图轮播(实例讲解)
2017/08/09 Javascript
js原生日历的实例(推荐)
2017/10/31 Javascript
vue实现的请求服务器端API接口示例
2019/05/25 Javascript
微信小程序使用npm包的方法步骤
2019/08/13 Javascript
解决vue 子组件修改父组件传来的props值报错问题
2019/11/09 Javascript
[14:00]DOTA2国际邀请赛史上最长大战 赛后专访B神
2013/08/10 DOTA
Python判断列表是否已排序的各种方法及其性能分析
2016/06/20 Python
Django实现登录随机验证码的示例代码
2018/06/20 Python
Python实现提取XML内容并保存到Excel中的方法
2018/09/01 Python
Carter’s OshKosh加拿大:购买婴幼儿服装和童装
2018/11/27 全球购物
采购员岗位职责
2013/11/15 职场文书
陈欧的广告词
2014/03/18 职场文书
质量保证书格式模板
2015/02/27 职场文书
演讲稿之开卷有益
2019/08/07 职场文书
Nginx安装完成没有生成sbin目录的解决方法
2021/03/31 Servers
原生JS封装vue Tab切换效果
2021/04/28 Vue.js
MySQL系列之六 用户与授权
2021/07/02 MySQL
Vue 打包后相对路径的引用问题
2022/06/05 Vue.js