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 相关文章推荐
Windows下PHP5和Apache的安装与配置
Sep 05 PHP
目录,文件操作详谈―PHP
Nov 25 PHP
php购物车实现代码
Oct 10 PHP
基于PHP字符串的比较函数strcmp()与strcasecmp()的使用详解
May 15 PHP
深入掌握include_once与require_once的区别
Jun 17 PHP
curl实现站外采集的方法和技巧
Jan 31 PHP
举例详解PHP脚本的测试方法
Aug 05 PHP
PHP使用trim函数去除字符串左右空格及特殊字符实例
Jan 07 PHP
php简单备份与还原MySql的方法
May 09 PHP
Ajax实现对静态页面的文章访问统计功能示例
Oct 10 PHP
PHP校验15位和18位身份证号的类封装
Nov 07 PHP
php 多继承的几种常见实现方法示例
Nov 18 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 json转换成数组形式代码分享
2014/11/10 PHP
laravel-admin自动生成模块,及相关基础配置方法
2019/10/08 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
Javascript:为input设置readOnly属性(示例讲解)
2013/12/25 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
2015/09/24 Javascript
Ajax异步文件上传与NodeJS express服务端处理
2017/04/01 NodeJs
详解有关easyUI的拖动操作中droppable,draggable用法例子
2017/06/03 Javascript
微信小程序使用navigateTo数据传递的实例
2017/09/26 Javascript
jQuery实现动态添加节点与遍历节点功能示例
2017/11/09 jQuery
vue引入ueditor及node后台配置详解
2018/01/03 Javascript
Vue 中使用vue2-highcharts实现曲线数据展示的方法
2018/03/05 Javascript
Vue服务端渲染实践之Web应用首屏耗时最优化方案
2019/03/22 Javascript
jQuery - AJAX load() 实例用法详解
2019/08/27 jQuery
[01:28:56]2014 DOTA2华西杯精英邀请赛 5 24 CIS VS DK
2014/05/26 DOTA
布同 Python中文问题解决方法(总结了多位前人经验,初学者必看)
2011/03/13 Python
python之wxPython应用实例
2014/09/28 Python
Python实现扫描局域网活动ip(扫描在线电脑)
2015/04/28 Python
python计算圆周率pi的方法
2015/07/11 Python
Python中字典和集合学习小结
2017/07/07 Python
Django 重写用户模型的实现
2019/07/29 Python
python中用logging实现日志滚动和过期日志删除功能
2019/08/20 Python
使用Python实现 学生学籍管理系统
2019/11/26 Python
使用Tensorboard工具查看Loss损失率
2020/02/15 Python
pycharm软件实现设置自动保存操作
2020/06/08 Python
Python应用实现处理excel数据过程解析
2020/06/19 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
2021/01/08 Python
HTML5 video播放器全屏(fullScreen)方法实例
2015/04/24 HTML / CSS
印度和世界各地的精美产品:Ikka Dukka
2018/02/12 全球购物
Boden澳大利亚官网:英国在线服装公司
2018/08/05 全球购物
理肤泉英国官网:La Roche-Posay英国
2019/01/14 全球购物
美国儿童珠宝在线零售商:Loveivy
2019/05/22 全球购物
毕业设计说明书
2014/05/07 职场文书
分公司负责人任命书
2014/06/04 职场文书
离婚案件被告代理词
2015/05/23 职场文书
高中运动会前导词
2015/07/20 职场文书
js面向对象编程OOP及函数式编程FP区别
2022/07/07 Javascript