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生成静态页
Nov 25 PHP
php面向对象全攻略 (十二) 抽象方法和抽象类
Sep 30 PHP
PHP 抓取新浪读书频道的小说并生成txt电子书的代码
Dec 18 PHP
php 冒泡排序 交换排序法
May 10 PHP
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
Aug 18 PHP
PHP查询网站的PR值
Oct 30 PHP
PHP中执行cmd命令的方法
Oct 11 PHP
php实现往pdf中加数字签名操作示例【附源码下载】
Aug 07 PHP
php实现二叉树中和为某一值的路径方法
Oct 14 PHP
PHP实现财务审核通过后返现金额到客户的功能
Jul 04 PHP
PHP快速导出百万级数据到CSV或者EXCEL文件
Nov 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
PHP+MYSQL的文章管理系统(二)
2006/10/09 PHP
也谈截取首页新闻 - 范例
2006/10/09 PHP
jQuery+PHP发布的内容进行无刷新分页(Fckeditor)
2015/10/22 PHP
php+lottery.js实现九宫格抽奖功能
2019/07/21 PHP
动态为事件添加js代码示例
2009/02/15 Javascript
JS下拉框内容左右移动效果的具体实现
2013/07/10 Javascript
js jquery ajax的几种用法总结(及优缺点介绍)
2014/01/28 Javascript
使用jQuery重置(reset)表单的方法
2014/05/05 Javascript
简介JavaScript中的italics()方法的使用
2015/06/08 Javascript
JavaScript的Polymer框架中dom-repeat与VM的相关操作
2015/07/29 Javascript
cocos2dx骨骼动画Armature源码剖析(一)
2015/09/08 Javascript
JavaScript函数的调用以及参数传递
2015/10/21 Javascript
Javascript中级语法快速入手
2016/07/30 Javascript
从零开始用electron手撸一个截屏工具的示例代码
2018/10/10 Javascript
JS+canvas五子棋人机对战实现步骤详解
2020/06/04 Javascript
[04:50]DOTA2亚洲邀请赛小组赛第四日 TOP10精彩集锦
2015/02/02 DOTA
python下如何让web元素的生成更简单的分析
2008/07/17 Python
python发送邮件的实例代码(支持html、图片、附件)
2013/03/04 Python
python写的ARP攻击代码实例
2014/06/04 Python
Django自定义manage命令实例代码
2018/02/11 Python
关于tf.matmul() 和tf.multiply() 的区别说明
2020/06/18 Python
丝芙兰美国官网:SEPHORA美国
2016/08/03 全球购物
瑞典时尚服装购物网站:Miinto.se
2017/10/30 全球购物
馥绿德雅美国官方网站:Rene Furterer头皮护理专家
2019/05/01 全球购物
俄罗斯厨房产品购物网站:COOK HOUSE
2021/03/15 全球购物
法学函授自我鉴定
2014/02/06 职场文书
《太阳》教学反思
2014/02/21 职场文书
新员工考核评语
2014/12/31 职场文书
中层干部考核评语
2015/01/04 职场文书
感谢信模板大全
2015/01/23 职场文书
起诉书范文
2015/05/20 职场文书
初中数学课堂教学反思
2016/02/17 职场文书
2019年大学生职业生涯规划书最新范文
2019/03/25 职场文书
IDEA 链接Mysql数据库并执行查询操作的完整代码
2021/05/20 MySQL
Spring Data JPA框架Repository自定义实现
2022/04/28 Java/Android
MySQL生成千万测试数据以及遇到的问题
2022/08/05 MySQL