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压缩多个CSS为一个css的代码并缓存
Apr 21 PHP
自己在做项目过程中学到的PHP知识收集
Aug 20 PHP
解析coreseek for sphinx的使用
Jun 21 PHP
php实现可以设置中奖概率的抽奖程序代码分享
Jan 19 PHP
MyEclipse常用配置图文教程
Sep 11 PHP
PHP+MySQL删除操作实例
Jan 21 PHP
php+xml结合Ajax实现点赞功能完整实例
Jan 30 PHP
PHP实现CSV文件的导入和导出类
Mar 24 PHP
DWZ+ThinkPHP开发时遇到的问题分析
Dec 12 PHP
Yii2配置Nginx伪静态的方法
May 05 PHP
PHP中类与对象功能、用法实例解读
Mar 27 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
PHP4引用文件语句的对比
2006/10/09 PHP
php UTF-8、Unicode和BOM问题
2010/05/18 PHP
php学习笔记(三)操作符与控制结构
2011/08/06 PHP
PHP+Mysql+jQuery实现发布微博程序 php篇
2015/10/15 PHP
php获取ip及网址的简单方法(必看)
2017/04/01 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
Apache站点配置SSL强制跳转443
2021/03/09 Servers
Mootools 1.2教程(2) DOM选择器
2009/09/14 Javascript
利用jQuary实现文字浮动提示效果示例代码
2013/12/26 Javascript
js函数模拟显示桌面.scf程序示例
2014/04/20 Javascript
Javascript之Math对象详解
2016/06/07 Javascript
js模拟支付宝密码输入框
2017/04/11 Javascript
VuePress 静态网站生成方法步骤
2019/02/14 Javascript
BootstrapValidator实现表单验证功能
2019/11/08 Javascript
Vue时间轴 vue-light-timeline的用法说明
2020/10/29 Javascript
手动实现把python项目发布为exe可执行程序过程分享
2014/10/23 Python
PyQt5 pyqt多线程操作入门
2018/05/05 Python
selenium+python自动化测试之鼠标和键盘事件
2019/01/23 Python
Python中format()格式输出全解
2019/04/12 Python
python web框架中实现原生分页
2019/09/08 Python
PyQt5 closeEvent关闭事件退出提示框原理解析
2020/01/08 Python
python调用API接口实现登陆短信验证
2020/05/10 Python
营销人才自我鉴定范文
2013/12/25 职场文书
买房子个人收入证明
2014/01/16 职场文书
个人自我剖析材料
2014/02/07 职场文书
会计专业应届生自荐信
2014/06/28 职场文书
情人节活动总结范文
2015/02/05 职场文书
年底个人总结范文
2015/03/10 职场文书
幼儿园教学工作总结2015
2015/05/12 职场文书
2016年圣诞节活动总结范文
2016/04/01 职场文书
确保减税降费落地生根,用实实在在措施
2019/07/19 职场文书
Python字符串对齐方法使用(ljust()、rjust()和center())
2021/04/26 Python
详解PHP服务器如何在有限的资源里最大提升并发能力
2021/05/25 PHP
Python自动化爬取天眼查数据的实现
2021/06/15 Python
PHP设计模式(观察者模式)
2021/07/07 PHP
threejs太阳光与阴影效果实例代码
2022/04/05 Javascript