博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php imagemagick 处理 图片剪切、压缩、合并、插入文本、背景色透明
阅读量:4671 次
发布时间:2019-06-09

本文共 2639 字,大约阅读时间需要 8 分钟。

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( );

 

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

转载于:https://www.cnblogs.com/hbyzs/p/7117380.html

你可能感兴趣的文章
如果战斗机飞行员弹出,自动驾驶仪会接管飞机安全降落么?
查看>>
Windows Azure Azure 简介
查看>>
java字符串截取指定下标位置的字符串
查看>>
Ubuntu 14.04开启ssh服务
查看>>
格式化输出;while循环;运算符
查看>>
javascrip学习之 数据类型和变量
查看>>
免费的DNS服务器
查看>>
Vim编辑器
查看>>
BZOJ 4094 USACO 2013 Dec. Optimal Milking
查看>>
电子电工学习方法
查看>>
【OpenJ_Bailian - 2790】迷宫(bfs)
查看>>
What's New In Python 3.X
查看>>
MyBatis(3):SQL映射
查看>>
PostQuitMessage, PostThreadMessage( WM_QUIT )
查看>>
升压转换器 (Boost)
查看>>
构建执法阅读笔记六
查看>>
2019年度苏州之春摄影作品展
查看>>
Css Hack
查看>>
高强度的加密软件怎么制作
查看>>
出现java.lang.IllegalArgumentException异常
查看>>