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 自写函数代码 获取关键字 去超链接
Feb 08 PHP
php异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE  eval()'d code error
May 19 PHP
解析php中memcache的应用
Jun 18 PHP
解析PHP中$_FILES的使用以及注意事项
Jul 05 PHP
php使用curl发送json格式数据实例
Dec 17 PHP
ThinkPHP模板Switch标签用法示例
Jun 30 PHP
php中动态修改ini配置
Oct 14 PHP
thinkphp中html:list标签传递多个参数实例
Oct 30 PHP
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
Sep 22 PHP
PHP 返回13位时间戳的实现代码
May 13 PHP
PHP请求远程地址设置超时时间的解决方法
Oct 29 PHP
Yii框架批量插入数据扩展类的简单实现方法
May 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
php写的简易聊天室代码
2011/06/04 PHP
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
2013/06/29 PHP
php中利用str_pad函数生成数字递增形式的产品编号
2013/09/30 PHP
使用YUI+Ant 实现JS CSS压缩
2014/09/02 PHP
PHP面向对象程序设计之接口的继承定义与用法详解
2018/12/20 PHP
浅谈laravel中的关联查询with的问题
2019/10/10 PHP
PHP tp5中使用原生sql查询代码实例
2020/10/28 PHP
经典海量jQuery插件 大家可以收藏一下
2010/02/07 Javascript
JS常用字符串处理方法应用总结
2014/05/22 Javascript
js实现内容显示并使用json传输数据
2016/03/16 Javascript
Node.js实现数据推送
2016/04/14 Javascript
深入理解React中es6创建组件this的方法
2016/08/29 Javascript
js实现的光标位置工具函数示例
2016/10/03 Javascript
Bootstrap源码学习笔记之bootstrap进度条
2016/12/24 Javascript
微信小程序 增、删、改、查操作实例详解
2017/01/13 Javascript
基于Bootstrap 3 JQuery及RegExp的表单验证功能
2017/02/16 Javascript
node和vue实现商城用户地址模块
2018/12/05 Javascript
实例讲解vue源码架构
2019/01/24 Javascript
浅谈redux, koa, express 中间件实现对比解析
2019/05/23 Javascript
使用VueRouter的addRoutes方法实现动态添加用户的权限路由
2019/06/03 Javascript
小程序瀑布流组件实现翻页与图片懒加载
2020/05/19 Javascript
Python中字符串格式化str.format的详细介绍
2017/02/17 Python
启动targetcli时遇到错误解决办法
2017/10/26 Python
Python爬虫实例扒取2345天气预报
2018/03/04 Python
Python判断变量名是否合法的方法示例
2019/01/28 Python
python3用PIL把图片转换为RGB图片的实例
2019/07/04 Python
教育学专业毕业生的自我鉴定
2013/11/26 职场文书
地理教师岗位职责
2014/03/16 职场文书
优秀的2014年两会精神解读
2014/03/17 职场文书
党员公开承诺书和承诺事项
2014/03/25 职场文书
社区清明节活动总结
2014/07/04 职场文书
教师批评与自我批评发言稿
2014/10/15 职场文书
青少年法制教育心得体会
2016/01/14 职场文书
如何正确理解python装饰器
2021/06/15 Python
一级电子管军用接收机测评
2022/04/05 无线电
德劲DE1107指针试高灵敏度全波段收音机机评
2022/04/05 无线电