手机版

PHP使用imagick扩展实现图像合并的方法

时间:2021-09-05 来源:互联网 编辑:宝哥软件园 浏览:

本文通过一个例子说明了在PHP中使用imagick扩展合并图像的方法。分享给大家参考,如下:

在外贸工作的女朋友最近需要做一本产品书。要求是每张A4纸上有20张图片。我以为这是一个小箱子,我的朋友会订购ps。但是当她把照片发给我的时候,我看到的时候差点吓死。有近万张图片,让ps吐血而死。

幸运的是,我可以订购php。好,写一个小程序完成拼图。因为图片是按照数字排列的,所以需要给每张图片加上数字,所以我的想法是:1。首先将所有图片缩放到统一的大小;2.把每一张有数字的图片组合成一张图片;3.每20张图片合成一张图片。图像处理使用ImageMagick和php的imagick扩展。下面的代码,有详细的注释:

第一步:

//step1:将大小调整为590 x 590$a=ROOT。'/'.' a ';//扫描目录$ DiRA=scandir($ a);$im=新ImagickForeach ($dirA as $item) {//跳过目录和缩略图if ($ item===' . '| | $ item==' . '| | strtr($ item,'。db '){继续;}//阅读图片$im-readImage($a. '/'。$ item);//获取图片宽度x高度$ geo=$ im-getImageGeometry();如果($ geo[' width ']===590 $ geo[' height ']===590){//宽度和高度匹配,跳过} else {//调整大小为590 x 590 im-resize image (590,590,gmaick3360:滤镜)}//将图片保存到另一个目录$ im-writeimage (root。/_ a/'。$ item);//释放资源$ im-destroy();}第二步:

//step2:合并图片和名称//扫描目录$files=scandir(ROOT。/_ a ');$ k=0;foreach($ file as $ item){//跳过目录和缩略图if ($ item===' . '| | $ item==' . '| | strtr($ item,'。db '){继续;}//文本图片的宽度为$ twidth=570//文字图片高度$ theight=141//获取图片名称$ path info=path info($ item);$ filename=$ path info[' filename '];//初始化图片对象$ text=newimagik//初始化绘图对象$ draw=new ImagickDraw//设置字体,这里是微软雅黑$draw-setFont('font/msyh.ttf ')放置在网站的字体下;//文本大小$ draw-SetFontSize(40);//文本颜色$ draw-set fillcolor(新imagick像素(' 000000 '));//文本对齐$ draw-settext对齐(imagick :3360 align _ left);//获取文本信息,主要是长度和宽度,因为$ a=$ text-queryfontmetrics($ draw,$ filename)应该在图片的中间;//添加文本$ draw-annotation($ twi DTH-$ a[' text width '])/2,80,$ filename//创建图像$ text-新图像($ twidth,$ theory,新imagick像素(' # ffffff ');//图像格式$ text-setImageFormat(' png ');//绘制图片$ text-draw image($ draw);//为canvas创建新的空白图片$ canvas=new Imagick$canvas-newimage(570,661,' white ');$ canvas-setImageFormat(' png ');//看图$ pic=newimagik$ pic-ReadMage(ROOT。/_a/'。$ item);$pic-scaleimage(470,470,真);//将图片合并成canvas $ canvas-composite image($ pic,imagick:3360 composite _ over,50,50);//将文本合并为canvas $ canvas-composite image($ text,imagick:3360 composite _ over,0,520);//将图片保存到另一个目录$ canvas-writeimage(根目录。/com _ a/'。$ item);$ k;echo ' $ k '文件继续。\ n ';}效果图

第三步:

//step3:合并每20张到一页//扫描目录$files=scandir(ROOT ./com _ a ');//给图片分组$ I=$ j=0;$ group=array();foreach($ file as $ item){ if($ item==='。|| $item=='.| | strtr($ item,' .db '){ 0继续;} $ 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-composite image($ im,imag ick : composite _ OVER,$x,$ y);//每四张一行if(($ I 1)% 4===0){ $ I=0;$ j;} else { $ I;} } $canvas-writeimage(ROOT ./merge_a/' .k美元.png ');$ c=$ k 1;echo 'Group {$c}/{$total}已完成“\ n”;}效果图

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

在线图片转换BASE64工具:http://工具。JB 51。净额/转码/img2b 64

图标图标在线生成工具:http://工具。JB 51。net/aidesign/ico _ img

在线电子邮件邮箱图标制作工具:http://工具。JB 51。net/email/email illogo

在线图片格式转换(jpg/bmp/gif/png)工具:http://工具。JB 51。net/aiddesign/picext

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

希望本文所述对大家服务器端编程语言(专业超文本预处理器的缩写)程序设计有所帮助。

版权声明:PHP使用imagick扩展实现图像合并的方法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。