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

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

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

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

代码如下

  1. $codeLogo = new \Imagick( '图片路径' );
    $codeLogo->thumbnailImage( '图片高','图片宽');
    header("Content-Type: image/{$image->getImageFormat()}");
    echo codeLogo;
    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 处理 图片剪切、压缩、合并、插入文本、背景色透明的更多相关文章

  1. node.js中使用imagemagick进行图片裁剪压缩

    node.js中使用imagemagick进行图片裁剪压缩 安装imagemagick sudo apt-get install imagemagick or wget http://www.imag ...

  2. Gulp 之图片压缩合并

    同事需要处理很多的图片,由于UI那边提供图片比较大,为了性能好一点,程序包小一点,因此希望我帮忙做成小程序来完成此工作. 其实之前做过一个grunt写的图片压缩合并工具,当时是为了处理270多个国家/ ...

  3. iOS 图片剪切和压缩的几个方法

    // 图片剪切 - (UIImage*)clipImageWithImage:(UIImage*)image inRect:(CGRect)rect {    CGImageRef imageRef ...

  4. gulp实时编译less,压缩合并requirejs模块文件

    gulp的使用命令简单,就几个,gulp的简单使用教材可以参考一点的gulp使用教材(http://www.ydcss.com/archives/18). 下面就简单的介绍这些命令如何互相配合的完成前 ...

  5. Gulp实现css、js、图片的压缩以及css、js文件的MD5命名

    目前做代码压缩合并的工具有很多,诸如gulp,webpack,grunt等等,可以说这些项目构建工具的功能非常之强大:图片压缩.图片转base64.css和js的压缩以及合并,文件的md5重命名 -- ...

  6. 引用:使用grunt 压缩 合并js、css文件

    引用:https://www.jianshu.com/p/08c7babdec65 压缩 js 文件 1.创建一个目录 名为grunt   目录.png 2.在grunt目录下创建一个 src目录,存 ...

  7. 用imageMagick合成图片添加图片水印

    用imageMagick合成图片的方式大致有三种, 使用convert命令加 +append或-append参数 使用convert命令加 -composite参数 直接使用composite命令来完 ...

  8. 前端构建工具 Gulp 压缩合并JS/CSS 并添加版本号、ES6转ES5

    Gulp 基于 Node.js 的前端构建工具,可以实现前端代码的编译(sass.less).压缩合并(JS.CSS).测试:图片的压缩:已经添加 JS 和 CSS 版本号,防止浏览器缓存. 1. 安 ...

  9. Joomla - 优化(时区、google字体、压缩图片、压缩自定义代码)

    Joomla - 优化(时区.google字体.压缩图片.压缩自定义代码) 一.时区 发布文章是往往会发现发布时间和当前时间对不上,原因是 Joomla 用的是国际标准时间,和中国时区大约相差8小时, ...

随机推荐

  1. Natas Wargame Level 3 Writeup 与 robots.txt

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnsAAAC5CAYAAABQi/kBAAAABHNCSVQICAgIfAhkiAAAIABJREFUeF

  2. Android 内存泄漏分析与解决方法

    在分析Android内存泄漏之前,先了解一下JAVA的一些知识 1. JAVA中的对象的创建 使用new指令生成对象时,堆内存将会为此开辟一份空间存放该对象 垃圾回收器回收非存活的对象,并释放对应的内 ...

  3. jQuery选择器中的空格问题

    前几天就遇到过这样的问题,明明我用的是('tr :even').css('background','#ccc')想改变表格中行的背景色,反复试了还是没改变.还问了度娘还是没找到原因所在(当时问题描述的 ...

  4. 深度解析PHP数组函数array_slice

    看到array_slice()这个函数让我想起了VFP中的range这个范围取值的子句 这个函数一共有四个参数: 被取值的数组(必需) 取值的起始位置(必需) 取值的终止位置,如果不填写默认到数组最后 ...

  5. 深入理解CSS3 Flexbox

    一.前言 Flexbox 是一个 CSS3 的盒子模型 ( box model ),顾名思义它就是一个灵活的盒子 ( Flexible Box ),为什麽最近这个属性才红起来呢?最主要也是因为 CSS ...

  6. 基于BUI开发Asp.net MVC项目

    因工作性质参于并开发过一些Web应用程序,前端项目框架也用了不少,比如MiniUI.ExtJS.以及定制的项目前端框架.无意中看到BUI前端框架,第一眼就被它的优雅布局所吸引.简洁的项目门户Banne ...

  7. cpp(第十七章)

    1.baseic_ostream<charT,traits>& write(const char_type *s,streamsize n),cout.write()第一个参数提供 ...

  8. OWIN的概念初接触

    OWIN这个词我昨天才认识,一直疑惑它是个什么东西,通过一定量的研究,得到一个初步的认识,留个脚印. OWIN是什么 OWIN是一个规范和标准,旨在阐述web服务器和web应用应该如何去解耦,它使得原 ...

  9. 安装xampp出错,安装xampp出错,windows找不到-n ?

    安装路径错误的问题 安装参考路径:D:\xampp\子文件

  10. Java下一个简单的数据库分库帮助类

    简介    前面两篇文章主要讲了数据库读写分离和分表分库的一些问题,这篇文章主要讲一下我个人实现的一个分表分库项目.     在此之前,我有写过一个.Net的分库,最近在做Java的项目,就顺便做出一 ...