php imagemagick 处理 图片剪切、压缩、合并、插入文本、背景色透明

摘要:
代码如下:1$codeLogo=newImagick(“图像路径”);2$code徽标->'图片宽度');代码如下:1代码=newImagick('图片路径');2$代码->代码如下:1$code=newImagick('覆盖图像的路径');2$codePro=$code->56$codeLogo=newImagick(“覆盖图像路径”);7$code徽标->

php有一款插件叫做imagemagick,功能很强大,提供了图片的很多操作,图片剪切、压缩、合并、插入文本、背景色透明等。并且有api方法调用和命令行操作两种方式,如果只是简单处理的话建议api方法调用,如果是很复杂的操作建议服务器端搭shell命令行操作,因为api方法调用同操作对比命令行他更吃内存,并且效率没有命令行那么高。

本文章就对于这些常见操作进行介绍说明

首先要提一声的时候每次通过imageMagic处理图片都会new一个对象出来,当图片处理好之后最好是把这个对象给销毁,它会占用cpu和内存,如果你不在乎这些小细节的话就当做我没有说,接下来进入正题。

图片宽高压缩:通过调用api中的 thumbnailImage 方法,可以实现图片宽高设置,这个操作不会影响图片的质量,是同大小压缩。

代码如下

1 $codeLogo = new Imagick( '图片路径' );
2 $codeLogo->thumbnailImage( '图片高','图片宽');
3 header("Content-Type: image/{$image->getImageFormat()}");
4 echo codeLogo;
5 exit;

图片存储大小压缩:通过调用api中的 setImageCompressionQuality 方法,可以实现图片存储大小设置,但是后带参数越小那么图片清晰度越差,但是图片存储大小会越小那么web加载的时候就越快,压缩率请根据实际情况进行调整。

代码如下

1 code = new Imagick( '图片路径' );
2 $code->setImageCompressionQuality('缩放比例');
3 header("Content-Type: image/{$image->getImageFormat()}");
4 echo $image->getImageBlob( );

图片合并: 通过imageMagick可以实现多个图片合并到一张图片中,但是在合并的时候需要根据被覆盖图片的高和宽来确定覆盖图片的xy坐标,获取被覆盖图片的高和宽可以通过方法getImageGeometry来获取图片属性,然后得到高和宽,然后进行定位计算,下边的代码是将覆盖图片水平、垂直居中。

代码如下

 1  $code = new Imagick( '被覆盖图片路径');
 2 $codePro = $code->getImageGeometry();
 3 $codeWidth = $codePro['width'];
 4 $codeHeight = $codePro['height'];
 5 
 6 $codeLogo = new Imagick( '覆盖图片路径' );
 7 $codeLogo->thumbnailImage(300,300);
 8 $codeLogo->roundCorners( 300, 300 ); // radio 圆角处理
 9 $code->compositeImage( $codeLogo, imagick::COMPOSITE_DEFAULT , ( $codeWidth - 300)/2, ( $codeHeight - 300 )/2 );
10 header("Content-Type: image/{$image->getImageFormat()}");
11 echo $image->getImageBlob( );

插入文本:插入文本你需要指定字体文件和字体位置,之后将你的文字塞到图片上去,你可以通过imageMagick对你的文字进行大小、字体、颜色进行调整,并且当你塞到图片的时候可以通过Imagick::GRAVITY_NORTH直接将文字定位为水平居中。

代码如下

 1 $image = new Imagick( '图片路径' );
 2 $draw = new ImagickDraw();
 3 $draw->setFontSize( '字体大小' );
 4 $draw->setTextKerning( 1 ); // 设置文件间距
 5 $draw->setFont( '字体库路径' );
 6 $draw->setFontWeight( 100 ); // 字体粗体
 7 $draw->setFillColor( '#434343' ); // 字体颜色
 8 $draw->setFontFamily( "Palatino" );
 9 $draw->setGravity( Imagick::GRAVITY_NORTH );
10 $image->annotateImage( $draw, 0, 840, 0, '文本' ) ;
11 header("Content-Type: image/{$image->getImageFormat()}");
12 echo $image->getImageBlob( );

背景色透明:这个网上查了很多资料,在这里不得不吐槽一下,php的imageMagickapi文档真难看,看来看去也看不出所以然,功夫不负有心人,最终做出来了,原理就是把图片背景颜色设置为透明色,api方法是 transparentPaintImage 后带四个参数,按照顺序分别是 目标颜色,透明度,擦边值,是否全部渲染,主要说明一下目标颜色,这个参数需要是色调值 rgba(238, 238, 238),而不是 white、black 这样的字符串。

代码如下

1 $code = new Imagick( '图片路径' );
2 $code->setimageformat('png');
3 $code->transparentPaintImage(new ImagickPixel( '目标颜色' ), 0, '10', 0);
4 header("Content-Type: image/{$image->getImageFormat()}");
5 echo $image->getImageBlob( );

本文章为原创,上边提供的所有方法都是本人测试通的,创作不易,如果转载请注明文章出处。

免责声明:文章转载自《php imagemagick 处理 图片剪切、压缩、合并、插入文本、背景色透明》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇a.download下载文件 ---跨域问题Nmap目录扫描和漏洞扫描(9.27 第十三天)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

element-ui自定义table表头,修改标题样式、添加tooltip及 :render-header使用简介

修改列标题样式1.在列标题后面加一个图标。 以element-ui官方文档一个table表格为例,我们在地址的后面加一个定位标志的图标,代码如下: <template>   <el-table     :data="tableData2"     style=" 100%"     :row-class-name="tableRowCla...

根据JavaScript中原生的XMLHttpRequest实现jQuery的Ajax

基本介绍 XmlHttpRequest XmlHttpRequest是JavaScript中原生的,历史悠久的一种发送网络请求的方案。 基本上所有前端框架对于网络请求的部分都是基于它来完成的。 在本章节中我们将了解它的基本用法,并且会实现一个与jQuery.ajax功能百分之九十相似的网络请求组件。 我是没有读过jQuery.ajax源码的,并且我也不是一...

python网络编程——IO多路复用之select

1 IO多路复用的概念         原生socket客户端在与服务端建立连接时,即服务端调用accept方法时是阻塞的,同时服务端和客户端在收发数据(调用recv、send、sendall)时也是阻塞的。原生socket服务端在同一时刻只能处理一个客户端请求,即服务端不能同时与多个客户端进行通信,实现并发,导致服务端资源闲置(此时服务端只占据 I/O,...

【Python 多进程】

" 一、模块介绍 multiprocess模快 仔细说来,multiprocess不是一个模块,而是python中的一个操作、管理进程的包,之所以叫multi是取自multiple的多功能的意思,这个包中几乎包含了和进程有关的所有子模块。 multiprocess.Process模块 Process能够帮助我们创建子进程,以及对子进程的一些控制....

【BIGDATA】将普通文本文件导入ElasticSearch

    以《刑法》文本.txt为例。    一、格式化数据1,首先,ElasticSearch只能接收格式化的数据,所以,我们需要将文本文件转换为格式化的数据---json。  下图为未处理的文本文件。     2,这里,使用python文件操作,将文本格式化为ElasticSearch可识别的json格式。 #python 3.6 #!/usr/bi...

二维码登录原理及生成与解析

一、前言   这几天在研究二维码的扫码登录。初来乍到,还有好多东西不懂。在网上看到有人写了一些通过QRCode或者Zxing实现二维码的生成和解码。一时兴起,决定自己亲手试一试。本人是通过QRCode实现的,下面具体的说一下。 二、二维码原理   基础知识参考:http://news.cnblogs.com/n/191671/   很重要的一部分知识:二维...