加入收藏 | 设为首页 | 会员中心 | 我要投稿 黔东南站长网 (https://www.0855zz.com.cn/)- 混合云存储、建站、网络、云计算、应用安全!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

学习PHP中好玩的Gmagick图像操作扩展的使用

发布时间:2022-08-02 15:14:37 所属栏目:PHP教程 来源:互联网
导读:在 PHP 的图像处理领域,要说最出名的 GD 库为什么好,那就是因为它不需要额外安装的别的什么图像处理工具,而且是随 PHP 源码一起发布的,只需要在安装 PHP 的时候添加上编译参数就可以了。 GD 库虽然已经可以帮助我们处理很多事情了,比如图片的简单绘制、
  在 PHP 的图像处理领域,要说最出名的 GD 库为什么好,那就是因为它不需要额外安装的别的什么图像处理工具,而且是随 PHP 源码一起发布的,只需要在安装 PHP 的时候添加上编译参数就可以了。
 
  GD 库虽然已经可以帮助我们处理很多事情了,比如图片的简单绘制、加水印、缩放等,但业务需求往往更加的多样和丰富,比如我们今天需要像 PS 一样能够让图片翻转、模糊之类的功能,仅靠 GD 库就非常麻烦了。
 
  当然,可能有不少的同学应该用过 ImageMagick ,不过我们今天先来介绍的可不是 ImageMagick ,而是它的一个分支软件 GraphicsMagick 。GraphicsMagick 是从 ImageMagick 5.5.2 中 fork 出来的一个分支。它相对于 ImageMagick 来说并没有什么新的特性,只是更加的专注于稳定性和性能方面。
 
  所以呢,我们学习的重点将放在后面的 ImageMagick 中,对于 GraphicsMagick 就通过这篇文章简单地了解一下吧!
 
  安装
  首先,我们需要在系统中安装 GraphicsMagick ,然后再安装 PHP 中的 Gmagick 扩展。具体的安装过程可以参考下面的链接:
 
  https://www.jianshu.com/p/7c4e02a84641
 
  加载图片及查看图片信息
  第一步还是来简单地看一下如何加载初始化 Gmagick 对象以及它的一些基本信息。
 
  $image = new Gmagick('./img/2.jpg');
 
  echo 'Copyright:', $image->getcopyright(), PHP_EOL;
  // Copyright:Copyright (C) 2002-2020 GraphicsMagick Group.
  // Additional copyrights and licenses apply to this software.
  // See http://www.GraphicsMagick.org/www/Copyright.html for details.
 
  echo 'Filename:', $image->getimagefilename(), PHP_EOL; // Filename:./img/2.jpg
 
  echo 'Image Format:', $image->getimageformat(), PHP_EOL; // Image Format:JPEG
 
  echo 'Image Width and Height:', $image->getimagewidth(), ' * ', $image->getimageheight(), PHP_EOL; // Image Width and Height:300 * 244
 
  echo 'Image type:', $image->getimagetype(), PHP_EOL; // Image type:6
  直接使用 new Gmagick(path) 就可以实例化一个 Gmagick 对象。接着,我们就可以通过一系列的 getxxxx 相关的方法来获得图片的一些信息,比如说当前 GraphicsMagick 的版本信息,图片路径、大小、格式等等。
 
  同样地,要对图片进行其它操作也是直接在这个对象下面使用各种扩展库中提供的方法就可以了。
 
  图片加边框
  // 加边框
  $image = new Gmagick('./img/2.jpg');
  $image->borderimage("green", 2, 2)->oilpaintimage(0.3);
  $image->write('./img/2-border.jpg');
  通过 borderimage() 方法就可以非常简单地给图片加上一个宽高为 2 像素的绿色边框。oilpaintimage() 是为图片添加一个油画效果,看出来了吗,Gmagick 实例化后的对象中的方法是可以链式调用的。只要当前你使用的方法返回的也是 Gmagick 对象就可以了。
 
  裁剪图片及缩略图
  $image = new Gmagick('./img/2.jpg');
  $image->resizeimage(150, 150, 10, 1);
  $image->write('./img/2-resize.jpg');
 
  $image = new Gmagick('./img/2.jpg');
  $image->scaleimage(150, 150);
  $image->write('./img/2-scale.jpg');
  这两个方法,resizeimage() 和 scaleimage() 都可以用来改变图片的大小,resizeimage() 会以通道的方式进行操作,不过实际的使用情况其实并没有太明显的差别。
 
  // 缩略图
  $image = new Gmagick('./img/2.jpg');
  $image->thumbnailimage(100, 0);
  $image->write('./img/2-thumbnail.jpg');
 
  // 裁剪缩略图
  $image = new Gmagick('./img/2.jpg');
  $image->cropthumbnailimage(100,90);
  $image->write('./img/2-cropthumbnaili.jpg');
 
  // 按比例缩小一半
  $image = new Gmagick('./img/2.jpg');
  $image->minifyimage();
  $image->write('./img/2-minify.jpg');
  thumbnailimage() 是直接生成缩略图,它的目标是制作适合在网上显示的小的低成本缩略图图象,我们可以只填一个宽或者只填一个高,图像就会自动等比例地绽放到指定的大小。cropthumbnailimage() 则是先通过缩小图像,然后从中心裁剪指定区域来创建固定大小的缩略图。其实它们从简单的测试表现来看,区别也并不是很大。
 
  minifyimage() 则是直接等比例地将图片缩小一半,所以这个方法不需要任何参数。
 
  图片旋转、偏移
  // 垂直翻转
  $image = new Gmagick('./img/2.jpg');
  $image->flipimage();
  $image->write('./img/2-flip.jpg');
 
  // 水平翻转
  $image = new Gmagick('./img/2.jpg');
  $image->flopimage();
  $image->write('./img/2-flop.jpg');
 
  // 旋转图像
  $image = new Gmagick('./img/2.jpg');
  $image->rotateimage('#ffffff', 60);
  $image->write('./img/2-rotate.jpg');
 
  // 偏移图像
  $image = new Gmagick('./img/2.jpg');
  $image->rollimage(150, 150);
  $image->write('./img/2-roll.jpg');
  flipimage() 和 flopimage() 是直接将图片进行垂直和水平地翻转,rotateimage() 则是根据指定的角度来旋转图片,第一个参数是旋转之后我们要给旋转经过的地方留下的背景色。rollimage() 的效果是偏移图片,就是将图片的位置在原始尺寸中进行偏移,这个效果说出来可能有点不太好理解,大家可以自己试一下,比较炫酷哦。

(编辑:黔东南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读