php imagemagick 处理 图片剪切、压缩、合并、插入文本、背景色透明
php有一款插件叫做imagemagick,功能很强大,提供了图片的很多操作,图片剪切、压缩、合并、插入文本、背景色透明等。并且有api方法调用和命令行操作两种方式,如果只是简单处理的话建议api方法调用,如果是很复杂的操作建议服务器端搭shell命令行操作,因为api方法调用同操作对比命令行他更吃内存,并且效率没有命令行那么高。
本文章就对于这些常见操作进行介绍说明
首先要提一声的时候每次通过imageMagic处理图片都会new一个对象出来,当图片处理好之后最好是把这个对象给销毁,它会占用cpu和内存,如果你不在乎这些小细节的话就当做我没有说,接下来进入正题。
图片宽高压缩:通过调用api中的 thumbnailImage 方法,可以实现图片宽高设置,这个操作不会影响图片的质量,是同大小压缩。
代码如下
$codeLogo = new \Imagick( '图片路径' );
$codeLogo->thumbnailImage( '图片高','图片宽');
header("Content-Type: image/{$image->getImageFormat()}");
echo codeLogo;
exit;
图片存储大小压缩:通过调用api中的 setImageCompressionQuality 方法,可以实现图片存储大小设置,但是后带参数越小那么图片清晰度越差,但是图片存储大小会越小那么web加载的时候就越快,压缩率请根据实际情况进行调整。
代码如下
code = new \Imagick( '图片路径' );
$code->setImageCompressionQuality('缩放比例');
header("Content-Type: image/{$image->getImageFormat()}");
echo $image->getImageBlob( );
图片合并: 通过imageMagick可以实现多个图片合并到一张图片中,但是在合并的时候需要根据被覆盖图片的高和宽来确定覆盖图片的xy坐标,获取被覆盖图片的高和宽可以通过方法getImageGeometry来获取图片属性,然后得到高和宽,然后进行定位计算,下边的代码是将覆盖图片水平、垂直居中。
代码如下
$code = new \Imagick( '被覆盖图片路径');
$codePro = $code->getImageGeometry();
$codeWidth = $codePro['width'];
$codeHeight = $codePro['height']; $codeLogo = new \Imagick( '覆盖图片路径' );
$codeLogo->thumbnailImage(300,300);
$codeLogo->roundCorners( 300, 300 ); // radio 圆角处理
$code->compositeImage( $codeLogo, \imagick::COMPOSITE_DEFAULT , ( $codeWidth - 300)/2, ( $codeHeight - 300 )/2 );
header("Content-Type: image/{$image->getImageFormat()}");
echo $image->getImageBlob( );
插入文本:插入文本你需要指定字体文件和字体位置,之后将你的文字塞到图片上去,你可以通过imageMagick对你的文字进行大小、字体、颜色进行调整,并且当你塞到图片的时候可以通过Imagick::GRAVITY_NORTH直接将文字定位为水平居中。
代码如下
$image = new \Imagick( '图片路径' );
$draw = new \ImagickDraw();
$draw->setFontSize( '字体大小' );
$draw->setTextKerning( 1 ); // 设置文件间距
$draw->setFont( '字体库路径' );
$draw->setFontWeight( 100 ); // 字体粗体
$draw->setFillColor( '#434343' ); // 字体颜色
$draw->setFontFamily( "Palatino" );
$draw->setGravity( \Imagick::GRAVITY_NORTH );
$image->annotateImage( $draw, 0, 840, 0, '文本' ) ;
header("Content-Type: image/{$image->getImageFormat()}");
echo $image->getImageBlob( );
背景色透明:这个网上查了很多资料,在这里不得不吐槽一下,php的imageMagickapi文档真难看,看来看去也看不出所以然,功夫不负有心人,最终做出来了,原理就是把图片背景颜色设置为透明色,api方法是 transparentPaintImage 后带四个参数,按照顺序分别是 目标颜色,透明度,擦边值,是否全部渲染,主要说明一下目标颜色,这个参数需要是色调值 rgba(238, 238, 238),而不是 white、black 这样的字符串。
代码如下
$code = new \Imagick( '图片路径' );
$code->setimageformat('png');
$code->transparentPaintImage(new \ImagickPixel( '目标颜色' ), 0, '10', 0);
header("Content-Type: image/{$image->getImageFormat()}");
echo $image->getImageBlob( );
本文章为原创,上边提供的所有方法都是本人测试通的,创作不易,如果转载请注明文章出处。
php imagemagick 处理 图片剪切、压缩、合并、插入文本、背景色透明的更多相关文章
- node.js中使用imagemagick进行图片裁剪压缩
node.js中使用imagemagick进行图片裁剪压缩 安装imagemagick sudo apt-get install imagemagick or wget http://www.imag ...
- Gulp 之图片压缩合并
同事需要处理很多的图片,由于UI那边提供图片比较大,为了性能好一点,程序包小一点,因此希望我帮忙做成小程序来完成此工作. 其实之前做过一个grunt写的图片压缩合并工具,当时是为了处理270多个国家/ ...
- iOS 图片剪切和压缩的几个方法
// 图片剪切 - (UIImage*)clipImageWithImage:(UIImage*)image inRect:(CGRect)rect { CGImageRef imageRef ...
- gulp实时编译less,压缩合并requirejs模块文件
gulp的使用命令简单,就几个,gulp的简单使用教材可以参考一点的gulp使用教材(http://www.ydcss.com/archives/18). 下面就简单的介绍这些命令如何互相配合的完成前 ...
- Gulp实现css、js、图片的压缩以及css、js文件的MD5命名
目前做代码压缩合并的工具有很多,诸如gulp,webpack,grunt等等,可以说这些项目构建工具的功能非常之强大:图片压缩.图片转base64.css和js的压缩以及合并,文件的md5重命名 -- ...
- 引用:使用grunt 压缩 合并js、css文件
引用:https://www.jianshu.com/p/08c7babdec65 压缩 js 文件 1.创建一个目录 名为grunt 目录.png 2.在grunt目录下创建一个 src目录,存 ...
- 用imageMagick合成图片添加图片水印
用imageMagick合成图片的方式大致有三种, 使用convert命令加 +append或-append参数 使用convert命令加 -composite参数 直接使用composite命令来完 ...
- 前端构建工具 Gulp 压缩合并JS/CSS 并添加版本号、ES6转ES5
Gulp 基于 Node.js 的前端构建工具,可以实现前端代码的编译(sass.less).压缩合并(JS.CSS).测试:图片的压缩:已经添加 JS 和 CSS 版本号,防止浏览器缓存. 1. 安 ...
- Joomla - 优化(时区、google字体、压缩图片、压缩自定义代码)
Joomla - 优化(时区.google字体.压缩图片.压缩自定义代码) 一.时区 发布文章是往往会发现发布时间和当前时间对不上,原因是 Joomla 用的是国际标准时间,和中国时区大约相差8小时, ...
随机推荐
- 通过rpm 安装MYSQL
1.MYSQL Server端安装: 2.MYSQL client 安装 3.设置MYSQL密码(安装了MySql客户端才可以执行) ' 4.登录MYSQL mysql 的最简单的安装方法啦
- 使用windows桌面ftp上传文件到linux服务器
首先在linux服务器上安装ftp [root@host2 test]#yum -y install ftp vsftpd [root@host2 test]#service vsftpd start ...
- 学习笔记TF009:对数几率回归
logistic函数,也称sigmoid函数,概率分布函数.给定特定输入,计算输出"success"的概率,对回题回答"Yes"的概率.接受单个输入.多维数据或 ...
- 数组去重,call、apply、bind之间的区别,this用法总结
一.数组去重,直接写到Array原型链上. //该方法只能去除相同的数字 不会去判断24和'24'是不同的 所有数字和字符串数字是相同是重复的 Array.prototype.redup=functi ...
- 关于bootstrap table 的可编辑列表的实例
最近被安排到一个新的项目里,首先被分配了一个成果管理的模块,虽然是简单的增删改查,但是也费了不少功夫. 其中耽误最长的时间就是form中嵌套了两个可编辑列表的子表.废话不说上干货 = = 参考资料 1 ...
- java.util.Properties类 学习笔记
学习目标: 1.认识properties文件,理解其含义,会正确创建properties文件. 2.会使用java.util.Properties类来操作properties文件. 3.掌握相对路 ...
- 热部署环境下,dubbo序列化的bug和优化
一.问题的发现与解决 (1) 在热部署下,使用dubbo的序列化一个pojo对象,反序列化时报错:ClassNotFoundException. 最后发现原因是我们的框架选择使用了java序列 ...
- (转)wxWidgets 2.9.2svn(3.x)最小体积编译方法
官方论坛.网上记录的wxWidgets编译方法,会导致编译后的程序库非常大,原因在于对编译的方法选择不当.下面简单总结一下如何编译最新的SVN代码.下载最新源码(每日构建):http://biolpc ...
- cpp(第二章)
1. 函数参数空着,代表void 2. 换行符 endl(确保程序继续运行前刷新输出,将其立即显示在屏幕上)|| '\n' (不能保证,这意味着有些系统中,有时可能输入信息后才会出现) 3.小谈cou ...
- DDD理论学习系列(5)-- 统一建模语言
DDD理论学习系列--案例及目录 1.引言 上一节讲解了领域模型,领域模型主要是将业务中涉及到的概念以面向对象的思想进行抽象,抽象出实体对象,确定实体所对应的方法和属性,以及实体之间的关系.然后将这些 ...