当前位置: 首页 > 后端技术 > PHP

学习PHP中好玩的Gmagick图像处理扩展的使用

时间:2023-03-30 00:21:10 PHP

在PHP图像处理领域,最著名的GD库之所以好,是因为它不需要安装任何额外的图像处理工具,而且是optional与PHP源码一起发布,安装PHP时只需要添加编译参数即可。虽然GD库已经可以帮助我们处理很多事情,比如简单的图片绘制、加水印、缩放等,但是业务需求往往更加多样和丰富。比如我们今天需要能够像PS一样对图片进行翻转和虚化。功能,单靠GD库是很麻烦的。当然可能很多同学都用过ImageMagick,但是今天要介绍的不是ImageMagick,而是它的一个分支GraphicsMagick。GraphicsMagick是ImageMagick5.5.2的一个分支。与ImageMagick相比,它并没有什么新的特点,而是更加注重稳定性和性能。所以,后面我们的学习重点会放在ImageMagick上,通过这篇文章来简单了解一下GraphicsMagick吧!安装首先我们需要在系统中安装GraphicsMagick,然后在PHP中安装Gmagick扩展。具体的安装过程可以参考以下链接:https://www.jianshu.com/p/7c4e02a84641加载图片和查看图片信息第一步简单看一下如何加载初始化Gmagick对象和一些基本的关于他们的信息。$image=newGmagick('./img/2.jpg');echo'Copyright:',$image->getcopyright(),PHP_EOL;//版权所有:版权所有(C)2002-2020GraphicsMagickGroup。//其他版权和许可适用于此软件。//请参阅http://www.GraphicsMagick.org/www/Copyright.html了解详情。echo'Filename:',$image->getimagefilename(),PHP_EOL;//文件名:。/img/2.jpgecho'图片格式:',$image->getimageformat(),PHP_EOL;//图片格式:JPEGecho'图片宽高:',$image->getimagewidth(),'*',$image->getimageheight(),PHP_EOL;//图片宽高:300*244echo'Imagetype:',$image->getimagetype(),PHP_EOL;//Imagetype:6直接用newGmagick(path)实例化一个Gmagick对象。然后,我们可以使用一系列getxxxx相关的方法来获取图像的一些信息,比如当前GraphicsMagick的版本信息、图像路径、大小、格式等等。同样,如果你想对图片进行其他操作,可以直接使用该对象下各种扩展库提供的方法。为图像添加边框//添加边框$image=newGmagick('./img/2.jpg');$image->borderimage("green",2,2)->oilpaintimage(0.3);$image->write('./img/2-border.jpg');使用borderimage()方法,可以很简单的给图片添加宽高为2像素的绿色边框。oilpaintimage()是给图片加上油画效果。看到了吗,Gmagick实例化的对象里面的方法是可以链式调用的。只要您当前使用的方法返回一个Gmagick对象,就可以了。裁剪图像和缩略图$image=newGmagick('./img/2.jpg');$image->resizeimage(150,150,10,1);$image->write('./img/2-resize.jpg');$image=newGmagick('./img/2.jpg');$image->scaleimage(150,150);$image->write('./img/2-scale.jpg');resizeimage()和scaleimage()这两个方法都可以用来改变图片的大小,resizeimage()会以通道的方式进行操作,但实际使用上其实差别不大。//缩略图$image=newGmagick('./img/2.jpg');$image->thumbnailimage(100,0);$image->write('./img/2-thumbnail.jpg');//裁剪缩略图$image=newGmagick('./img/2.jpg');$image->cropthumbnailimage(100,90);$image->write('./img/2-cropthumbnaili.jpg');//缩小一半$image=newGmagick('./img/2.jpg');$image->minifyimage();$image->write('./img/2-minify.jpg');thumbnailimage()是直接生成缩略图。它的目标是制作适合在Internet上显示的小而低成本的缩略图。我们可以只填一个宽或者一个高,图片会自动按比例绽放到指定的尺寸。croptumbnailimage()通过首先缩小图像然后从中心裁剪指定区域来创建固定大小的缩略图。其实从简单的测试性能来看,差别不是很大。minifyimage()直接将图片按比例缩小一半,所以这个方法不需要任何参数。图片旋转、偏移//垂直翻转$image=newGmagick('./img/2.jpg');$image->flipimage();$image->write('./img/2-flip.jpg');//水平翻转$image=newGmagick('./img/2.jpg');$image->flopimage();$image->write('./img/2-flop.jpg');//旋转图像$image=newGmagick('./img/2.jpg');$image->rotateimage('#ffffff',60);$image->write('./img/2-rotate.jpg');//偏移图像$image=newGmagick('./img/2.jpg');$image->rollimage(150,150);$image->write('./img/2-滚动.jpg');flipimage()和flopimage()直接将图像垂直和水平翻转,而rotateimage()将图像按指定角度旋转。第一个参数是旋转后我们要旋转的地方留下背景色。rollimage()的作用是对图片进行偏移,即图片在原尺寸中的位置偏移。这种影响可能不太容易理解。你可以自己尝试一下,这很酷。图片色彩效果调整//调整亮度、饱和度、色相$image=newGmagick('./img/2.jpg');$image->modulateimage(80,80,80);$image->write('./img/2-modulate.jpg');//颜色对比$image=newGmagick('./img/2.jpg');$image->normalizeimage(30);$image->write('./img/2-normalize.jpg');modulateimage()直接通过三个参数对图像的亮度、饱和度和色相进行相应的调整,它们的值是-100到100之间的整数。这个其实类似于PS中的相关图片调整工具。在PS或者各种图片编辑软件中,都会有一个滑块,可以上下拉动调整。同样,normalizeimage()调整图像的对比度,和图像编辑软件的参数值类似。各种特效//模糊效果$image=newGmagick('./img/2.jpg');$image->blurimage(30,10);$image->write('./img/2-blur.jpg');//运动模糊效果$image=newGmagick('./img/2.jpg');$image->motionblurimage(30,50,10);$image->write('./img/2-motionblur.jpg');//径向模糊效果//$image=newGmagick('./img/2.jpg');//$image->radialblurimage(12.5);//$image->write('./img/2-radialblur.jpg');模糊效果包含三个模糊工具。第一个blurimage()方法是一个普通的模糊函数。它的两个参数是模糊半径和标准偏差。通过调整这两个参数,可以获得不同的模糊效果。motionblurimage()运动模糊其实就是左右拖动有轻微斜率的模糊效果。最后的径向模糊效果在测试中一直报错,一直没有找到原因。GraphicsMagick本身好像不支持这个功能。用过,了解情况的同学可以留言说明!//模拟油画效果$image=newGmagick('./img/2.jpg');$image->oilpaintimage(5);$image->write('./img/2-oilpaint.jpg');//创建一个模拟的3D按钮$image=newGmagick('./img/2.jpg');$image->raiseimage(50,50,150,150,true);$image->write('./img/2-raise.jpg');//木炭效果$image=newGmagick('./img/2.jpg');$image->charcoalimage(10,3);$image->write('./img/2-charcoal.jpg');//将太阳能效果应用于图像$image=newGmagick('./img/2.jpg');$image->solarizeimage(60);$image->write('./img/2-solarize.jpg');//随机移动图像中的像素$image=newGmagick('./img/2.jpg');$image->spreadimage(10);$image->write('./img/2-spread.jpg');//围绕中心旋转像素$image=newGmagick('./img/2.jpg');$图像->漩涡图像(100);$image->write('./img/2-swirl.jpg');这些效果我就不多说了,大家可以自己去试试。从总结中可以看出,其实和GD相比,GraphicsMagick在修图上实现这些效果是非常简单的。而这些都是一般图片编辑软件都会有的功能,也就是说我们可以用PHP做一个类似的在线图片编辑工具!当然,这些功能在后面学习的ImageMagick中也有,甚至连方法名都基本相同。因此,我们在学习ImageMagick时,不会详细解释各个方法函数的作用。此外,GraphicsMagick还有两个对象GmagickDraw和GmagickPixel,用于绘制图形和定义颜色。这两个对象在ImageMagick中也有相应的实现,我们主要关注那里的学习。测试代码:https://github.com/zhangyue0503/dev-blog/blob/master/php/202012/source/4。了解在PHP(1)中使用有趣的Gmagick图像处理扩展。PHP参考文档:https://www.php.net/manual/zh/book.gmagick.php各媒体平台均可搜索【硬核项目经理】