《PHP使用imagick扩展实现合并图像的方法》要点:

本文介绍了PHP使用imagick扩展实现合并图像的方法,希望对您有用。如果有疑问,可以联系我们。

PHP使用imagick扩展实现合并图像的方法.分享给大家供大家参考,具体如下:

女朋友做外贸的,最近需要做个产品册,要求是每张A4纸上有20个图片,我心想小case吧,哥们会点ps呢.可是当她把图片发给俺,俺一看差点吓屎,近10000张图片,这要ps必定吐血身亡...

还好俺还会点PHP,好吧,写个小程序来完成拼图.因为图片都是按编号排列的,要求给每个图片都加上编号,于是我的思路是:1.先把所有图片缩放到统一尺寸 2.把每张图片和编号组合到一张图 3.把每20张图再组合到一张图.图片处理用到了ImageMagick和PHP的imagick扩展.下面上代码,有详细注释:

第一步:

// step1: 调整尺寸到 590 x 590

$a = ROOT . '/' . 'a';

// 扫描目录

$dirA = scandir($a);

$im = new Imagick;

foreach ($dirA as $item) {

// 跳过目录和缩略图

if ($item === '.' || $item === '..' || strstr($item,'.db')) {

continue;

}

// 读取图片

$im->readImage($a . '/' . $item);

// 获取图片宽x高

$geo = $im->getImageGeometry();

if ($geo['width'] === 590 && $geo['height'] === 590) {

// 宽高符合,跳过

} else {

// 调整尺寸到590 x 590

im->resizeImage(590,590,Gmagick::FILTER_UNDEFINED,1,TRUE);

}

// 将图片保存到另一目录

$im->writeImage(ROOT . '/_a/' . $item);

// 释放资源

$im->destroy();

}

第二步:

// step2: 合并图片和名字

// 扫描目录

$files = scandir(ROOT . '/_a');

$k = 0;

foreach ($files as $item) {

// 跳过目录和缩略图

if ($item === '.' || $item === '..' || strstr($item,'.db')) {

continue;

}

// 文本图片的宽

$twidth = 570;

// 文本图片的高

$theight = 141;

// 获取图片名

$pathinfo = pathinfo($item);

$filename = $pathinfo['filename'];

// 初始化图片对象

$text = new Imagick;

// 初始化绘制对象

$draw = new ImagickDraw;

// 设置字体,这里是放到网站的font下的微软雅黑

$draw->setFont('font/msyh.ttf');

// 文字大小

$draw->setFontSize(40);

// 文字颜色

$draw->setFillColor(new ImagickPixel('#000000'));

// 文字对齐方式

$draw->setTextAlignment(Imagick::ALIGN_LEFT);

// 获取文字信息,主要是长宽,因为要实现在图片居中

$a = $text->queryFontMetrics($draw,$filename);

// 添加文字

$draw->annotation(($twidth - $a['textWidth']) / 2,80,$filename);

// 建立图像

$text->newImage($twidth,$theight,new ImagickPixel('#ffffff'));

// 图片格式

$text->setImageFormat('png');

// 绘制图片

$text->drawImage($draw);

// 新建一个空白图片用来做画布

$canvas = new Imagick;

$canvas->newimage(570,661,'white');

$canvas->setImageFormat('png');

// 读取图片

$pic = new Imagick;

$pic->readImage(ROOT . '/_a/' . $item);

$pic->scaleimage(470,470,TRUE);

// 将图片合并到画布

$canvas->compositeImage($pic,Imagick::COMPOSITE_OVER,50,50);

// 将文字合并到画布

$canvas->compositeimage($text,520);

// 保存图片到另一目录

$canvas->writeimage(ROOT . '/com_a/' . $item);

$k++;

echo "{$k} files proceeded.\n";

}

第三步:

// step3: 合并每20张到一页

// 扫描目录

$files = scandir(ROOT . '/com_a');

// 给图片分组

$i = $j = 0;

$group = array();

foreach ($files as $item) {

if ($item === '.' || $item === '..' || strstr($item,'.db')) {

continue;

}

$i++;

$group[$j][] = $item;

if ($i % 20 === 0) {

$j++;

}

}

$total = count($group);

// 按组拼接图片,A4纸尺寸,4x5的组合方式

foreach ($group as $k => $v) {

$canvas = new Imagick;

$canvas->newimage(2480,3508,'white');

$canvas->setimageformat('png');

$i = $j = 0;

foreach ($v as $item) {

$im = new Imagick(ROOT . '/com_a/' . $item);

// 预留了150的左边距

$x = 150 + $i * 570;

// 130的顶边距

$y = 130 + $j * 661;

$canvas->compositeimage($im,$x,$y);

// 每4张一行

if (($i + 1) % 4 === 0) {

$i = 0;

$j++;

} else {

$i++;

}

}

$canvas->writeimage(ROOT . '/merge_a/' . $k . '.png');

$c = $k + 1;

echo "Group {$c}/{$total} done.\n";

}

PS:这里再为大家推荐几款比较实用的图片处理工具供大家参考使用:

在线图片转换BASE64工具:@H_403_89@http://tools.jb51.net/transcoding/img2base64

ICO图标在线生成工具:@H_403_89@http://tools.jb51.net/aideddesign/ico_img

在线Email邮箱图标制作工具:@H_403_89@http://tools.jb51.net/email/emaillogo

在线图片格式转换(jpg/bmp/gif/png)工具:@H_403_89@http://tools.jb51.net/aideddesign/picext

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP图形与图片操作技巧汇总》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《PHP面向对象程序设计入门教程》、《PHP网络编程技巧总结》、《PHP数组(Array)操作技巧大全》、《PHP字符串(string)用法总结》、《PHP+MysqL数据库操作入门教程》及《PHP常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助.

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

php 扩展了imagick,PHP编程:PHP使用imagick扩展实现合并图像的方法相关推荐

  1. php 获取网络图片合成,PHP使用imagick扩展实现合并图像的方法

    本文实例讲述了PHP使用imagick扩展实现合并图像的方法.分享给大家供大家参考,具体如下: 女朋友做外贸的,最近需要做个产品册,要求是每张A4纸上有20个图片,我心想小case吧,哥们会点ps呢. ...

  2. php imagick 扩展,PHP使用imagick扩展实现合并图像的方法详解

    这篇文章主要介绍了PHP使用imagick扩展实现合并图像的方法,结合实例形式分析了php基于imagick扩展处理图片的具体步骤与相关操作技巧,需要的朋友可以参考下 第一步: // step1: 调 ...

  3. JAVA 代码交互率低的原因分析,深入剖析Java编程中的中文问题及建议最优解决方法...

    说明:本文为作者原创,作者联系地址为: josserchai@yahoo.com .由于 Java 编程中的中文 问题是一个老生常谈的问题,在阅读了许多关于 Java 中文问题解决方法之后,结合作者的 ...

  4. python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法

    python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法 目录

  5. android 图片绑定按钮,Android编程实现给Button添加图片和文字的方法

    本文实例讲述了Android编程实现给Button添加图片和文字的方法.分享给大家供大家参考,具体如下: //为按钮添加图片和文字的方法 public Spanned getSpan(int id, ...

  6. 嵌入式编程C语言提高代码效率的14种方法

    嵌入式编程C语言提高代码效率的14种方法 1.在可能的情况下使用typedef替代define.当然有时候你无法避免define,但是typedef更好. typedef int* INT_PTR; ...

  7. java定义一个类计算圆的半径,C++编程:定义一个圆类要求属性为半径,操作为计算圆的周长和面积...,java编程:定义一个圆类,属性为半径,方法为对输入的半径计...

    导航:网站首页 > C++编程:定义一个圆类要求属性为半径,操作为计算圆的周长和面积...,java编程:定义一个圆类,属性为半径,方法为对输入的半径计 C++编程:定义一个圆类要求属性为半径, ...

  8. php+imagick详解,PHP中imagick函数的中文解释_php技巧

    imagick的:: adaptiveBlurImage - 增加了自适应模糊滤镜图像 imagick的:: adaptiveResizeImage - 自适应调整图像数据依赖三角 imagick的: ...

  9. Java编程:Java的反射机制中的 getComponentType() 方法

    转载自  Java编程:Java的反射机制中的 getComponentType() 方法 Java 中所有的类都继承自 Object,数组本身也是一个 Class,如果我们能够得到数据的 Class ...

最新文章

  1. 面试官:磁盘 IO 变高,你怎么分析?
  2. 以太经典(ETC)逆势上涨,将逆袭反超以太坊(ETH)?
  3. ESP8266 wifi干扰、钓鱼实现
  4. 【经典回放】多种语言系列数据结构算法:希尔排序
  5. 从小害怕数学的他,却成为了科普数学教育的数学家
  6. c++ 读文件_第十六节:读文件,文件的创建,写文件,文件的读写以及鼠标键盘事件和图形绘制...
  7. 技术员联盟win11系统64位专业版镜像v2021.08
  8. 那是飞扬的青春—小评《DOOM启示录》
  9. linux优化安装包,安装Xshell跟Linux相连并优化(付安装包)
  10. Unity3d trial version 水印
  11. Netty websocket 推送数据压缩以 js解压
  12. 每个广告组放多少个关键字合适?
  13. 变限积分求导公式总结_积分变限函数求导的基本方法
  14. JavaCC中扩展的正规表达式
  15. 透明代理、匿名代理、混淆代理、高匿代理有什么区别?
  16. 树莓派与ESP8266-MQTT无线通信
  17. Nvjdc(诺兰)再续经典——诺兰方舟ARK
  18. Java官方教程(三-1)运算符 operator(2020.12.18)
  19. 红警ol服务器维护中1003,【图片】红警ol心灵终结3单位全面解析_红警ol吧_百度贴吧...
  20. 在MySQL中创建视图的X种方式

热门文章

  1. Neo4j Vs JanusGraph Vs Tigergraph
  2. open3d学习教程2--点云1
  3. 一个巨牛的人工智能教程
  4. QDateEdit日历修改之QCalendarWidget 样式设置
  5. mpi4py 并行读/写 numpy npy 文件的方法
  6. 大数据里的春节出行:用户关注封城,返程高峰提前
  7. Yen Threshoding
  8. 解决thingsboard 二开 跨域问题
  9. 揭示生命奥秘,促进疫苗研发,生物物理学有望掀起下一轮医学革命
  10. React 中ref 的使用(类组件和函数组件)以及forwardRef 与 useImperativeHandle 详解