一、安装

mac下的安装非常简单

brew search ImageMagick
brew install xxx

安装后,可验证

magick logo: logo.gif
identify logo.gif
display logo.gif

更多安装方式参考:http://www.imagemagick.org/script/download.php

二、命令介绍

命令概览convert:转换图像格式和大小,模糊,裁剪,驱除污点,抖动,临近,图片上画图片,加入新图片,生成缩略图等。
identify:描述一个或较多图像文件的格式和特性。
mogrify:Mogrify改写最初的图像文件然后写到一个不同的图像文件。
composite:根据一个图片或多个图片组合生成图片。
montage:创建一些分开的要素图像。在含有要素图像任意的装饰图片,如边框、结构、图片名称等。
display:如果你拥有一个X server的系统,它可以按次序的显示图片
animate:利用X server显示动画图片
import:在X server或任何可见的窗口上输出图片文件。 你可以捕获单一窗口,整个的荧屏或任何荧屏的矩形部分。用于截屏
conjure:解释执行 MSL (Magick Scripting Language) 写的脚本。

2.1 identify:ImageMagick有一个小工具identify,它可以用来显示一个图片文件的详悉信息,比如格式、分辨率、大小、色深等等
identify xxx.png
identify -format "%wx%h" image.png
只获取图片的宽高2.2 convert格式:convert foo.jpg foo.pngconvert *.jpg  foo.pdf
转换当前目录所有jpg文件为一个pdf文件mogrify -format png *.jpg
批量转换当前目录所有jpg为相应的png大小:convert -resize 100x100 foo.jpg thumbnail.jpg
转换原图为100*100的缩略图convert -resize 50%x50% foo.jpg thumbnail.jpg
百分比转换缩略图convert -resize 200% foo.jpg big.jpg
即放大图片,效果就是模糊了convert -resize "500x300>" input.jpg  output.jpg
如果图片比500x300小就保持原样,以防小图片被放大失真convert -sample 50% foo.jpg thumb.jpg
利用sample缩小图片mogrify -sample 80x60 *.jpg
批量生成缩略图,会覆盖原有图像convert -sample 10% -sample 1000% image.png sample.png
先缩小在放大,形成马赛克效果,用resize,无此效果
与resize的区别在于-sample只进行了采样,没有进行插值,所以用来生成缩略图最合适裁剪:convert -crop 100x100+50+50 image.png crop.png
从50x50位置开始,相对于图片左上角,裁剪100x100大小的图片
如果不指定位置,则按照这个大小分隔出小图片,这个命令生成crop-0.png,crop-1.png,crop-2.png……:convert  -gravity northeast -crop 100x100+0+0 image.png crop.png
-gravity即指定坐标原点,有northwest:左上角,north:上边中间,northeast:右上角,east:右边中间...旋转:convert -rotate 30 foo.png bar.png
上面的30,表示向右旋转30度,如果要向左旋转,度数就是负数convert -background #000 -rotate 30 foo.png bar.png
黑色背景 @todo 不支持
convert -background rgba(0,0,0,0) -rotate 30 foo.png bar.png
透明背景合并:
合并指的是将一张图片覆盖到一个背景图片上convert -compose over overlay.png -composite image.png  newimage.png
-compose指定覆盖操作的类型,其中over为安全覆盖,另外还有xor、in、out、atop等等覆盖的位置可以通过-gravity指定
convert -gravity southeast -compose over overlay.png -composite image.png newimage.png 拼接:
横向拼接(+append),下对齐(-gravity south)
纵向拼接(-append),右对齐(-gravity east)convert image1.png image2.png image3.png -gravity south +append result.png
convert -gravity south +append image1.png image2.png image3.png result.png边框:convert -mattecolor "#000000" -frame 60x60 yourname.jpg rememberyou.png
图片四周加边框,"#000000"是边框的颜色,边框的大小为60x60convert -border 60x60 -bordercolor "#000000" yourname.jpg rememberyou.png
上边一样的效果convert -trim -fuzz 10% image.png newimage.png
去掉边框图片加文字:convert -fill green -pointsize 40 -draw 'text 10,50 "charry.org"' foo.png bar.png
上面的命令在距离图片的左上角10x50的位置,用绿色的字写下charry.org,如果你要指定别的字体,可以用-font参数模糊:convert -blur 80 foo.jpg foo.png
高斯模糊 -blur参数还可以这样-blur 80x5。后面的那个5表示的是Sigma的值,这个是图像术语
80x50 比 80x5要模糊翻转:convert -flip foo.jpg bar.jpg
convert -flop foo.jpg bar.jpg
-flip 上下翻转
-flop 左右翻转反色:convert -negate foo.jpg bar.jpg
形成底片的样子单色:convert -monochrome foo.png bar.png
黑白图片加噪声:convert -noise 3 foo.png bar.png油画效果:convert -paint 4 foo.png bar.png
数值越大,越模糊,越油炭笔效果:convert -charcoal 2 foo.png bar.png
形成炭笔或者说是铅笔画的效果
数值越大,铅笔颜色越重越黑散射:convert -spread 30 foo.png bar.png
毛玻璃效果
数值越大,越模糊旋涡:convert -swirl 67 foo.png bar.png
以图片的中心作为参照,把图片扭转,形成漩涡的效果
数值越大,旋涡越大凸起效果:convert -raise 5x5 foo.png bar.png
照片的四周会一个5x5的边,如果你要一个凹下去的边,把-raise改为+raise就可以了质量和profile:影响图片大小(占用空间)主要取决于图片的profile和qualityconvert -quality 85 src.jpg src-quality85.jpg
设置质量为原来的85,减少图片的大小convert +profile “*” -strip src.jpg src-profile.jpg
去掉图片的描述信息,减少图片的大小

View Code

制作gif图片$ convert -delay 0 *.bmp -loop 0 animated.gif
//      将当前目录下所有的bmp文件合成一个gif图片动画, 每帧间隔0ms, 重复播放。
//      -delay n     迟延n*10毫秒
//      -loop  n     播放n轮, 0表示不断地重复播放
$ convert -delay 50 frame1.gif frame1.gif frame1.gif -loop 0 animated.gif
//      将当前目录下的frame1.gif文件制作成animated.gif动画,其中3个frame1.gif作为一组,进行循环播放,延迟500毫秒。

$ convert -delay 50 frame1.gif -delay 100 frame1.gif -delay 150 frame1.gif -loop 0 -pause 200 animated.gif
//      在一轮播放之后暂停200毫秒,再进行下一轮播放。

$ convert anim1.gif anim2.gif combined.gif
//      将两个动画文件合并成一个。

View Code

三、案例使用

在实际应用中,用到了图片的缩略图生成,实际上去掉了图片的exif profile信息和降低了图片的质量

从而大大减少了图片的体积也不影响其清晰度

<?phpclass Imagick_tool{public $obj = null;public function __construct(){if(!extension_loaded('Imagick')){return false;}$this->obj = new Imagick();}public function destory(){  if(is_object($this->obj)){  $this->obj->clear();  $this->obj->destroy();  }  }/*** [strip_profile 去掉图片的profile属性]* @param  [type] $src_img  [description]* @param  string $dest_img [description]* @return [type]           [description]*/public function strip_profile($src_img,$dest_img = ''){try{$dest_img = empty($dest_img) ? $src_img : $dest_img;$this->obj->readImage($src_img);$this->obj->stripImage();if($this->obj->writeImage($dest_img)){$this->obj->destroy();return $src_img;}}catch(ImagickException $e){return false;}}/*** [set_quality 设置图片质量]* @param [type]  $src_img  [description]* @param integer $quality  [description]* @param string  $dest_img [description]*/public function set_quality($src_img,$quality = 70,$dest_img = ''){  if(!is_object($this->obj)){  return false;  }  try{  $dest_img = empty($dest_img) ? $src_img : $dest_img;  $this->obj->readImage($src_img);  $this->obj->setImageCompression(Imagick::COMPRESSION_JPEG);  $this->obj->setImageCompressionQuality($quality);  if($this->obj->writeImage($dest_img)){  $this->destory();  return $dest_img;  }  return false;  }  catch (ImagickException $e){  return false;  }  }/*** [图片瘦身] *  * @param string     src_img 源图片路径 * @param int        quality 设置图片压缩质量 * @param string     dest_img 要生成的图片的路径 * @return boolean   成功返回图片地址  否则false */  public function slimming($src_img,$quality = 60,$dest_img = ''){  if(!is_object($this->obj)){  return false;  }  try {  $dest_img = empty($dest_img) ? $src_img : $dest_img;  $this->obj->readImage($src_img);  $this->obj->setImageFormat('jpeg');  $this->obj->setImageCompression(Imagick::COMPRESSION_JPEG);  //将图片的质量降低到原来的60%  $quality = $this->obj->getImageCompressionQuality() * $quality / 100;  $this->obj->setImageCompressionQuality($quality);  $this->obj->stripImage();  if($this->obj->writeImage($dest_img)){  $this->destory();  return $dest_img;  }  return false;  }catch (ImagickException $e){  return false;  }  }  /*** [生成并压缩缩略图]* @param  [type]  $src_img [description]* @param  integer $width   [description]* @param  string  $height  [description]* @param  boolean $is_slimming [<description>]* @param  boolean $is_thumbnail [<description>]* @param  boolean $is_bestfit  Optional fit parameter* @return [type]           [description]*/public function thumb($src_img,$width = 360,$height = '',$quality = 60,$is_slimming = true,$is_thumbnail = false,$is_bestfit = true){  if(!is_object($this->obj)){  return false;  }  try {  $file_info = pathinfo($src_img);  //生成缩略图名称  $file_name = substr($file_info['basename'],0,strrpos($file_info['basename'],'.'));if($is_thumbnail){$file_name_thumb = "_thumb_thumbnail";}else{$file_name_thumb = "_thumb_resize";}$dest_img = $file_info['dirname'] . '/' . $file_name . $file_name_thumb . '.' . $file_info['extension'];  $this->obj->readImage($src_img);//计算要获得缩略图的高度  $img_width = $this->obj->getImageWidth();  $img_height = $this->obj->getImageHeight();$dest_width = $img_width;$dest_height = $img_height;if($width < $img_width){$dest_width = $width;$dest_height = $img_height * ($width / $img_width);}if($is_thumbnail){$this->obj->thumbnailImage($dest_width, $dest_height,$is_bestfit); }else{$this->obj->resizeImage($dest_width, $dest_height, Imagick::FILTER_CATROM, 1, $is_bestfit);}//是否压缩图片if($is_slimming){$this->obj->setImageFormat('jpeg');  $this->obj->setImageCompression(Imagick::COMPRESSION_JPEG);  //将图片的质量降低到原来的60%  $quality = $this->obj->getImageCompressionQuality() * $quality / 100;  $this->obj->setImageCompressionQuality($quality);  $this->obj->stripImage();}//生成图片  if($this->obj->writeImage($dest_img)){  $this->destory();  return $dest_img;  }  return false;  }catch (ImagickException $e){  return false;  }  }  }

View Code

四、参考文献

http://www.imagemagick.org
http://php.net/manual/zh/book.imagick.php
https://codeday.me/bug/20170711/40588.html
http://blog.csdn.net/qwsamxy/article/details/50530900
http://blog.csdn.net/andy1219111/article/details/38335987
http://www.charry.org/docs/linux/ImageMagick/ImageMagick.html
http://blog.just4fun.site/use-ImageMagick.html

转载于:https://www.cnblogs.com/fanfan259/p/7649790.html

ImageMagick简单记录相关推荐

  1. python 绘图脚本系列简单记录

    简单记录平时画图用到的python 便捷小脚本 1. 从单个文件输入 绘制坐标系图 #!/usr/bin/python # coding: utf-8 import matplotlib.pyplot ...

  2. ubuntu bind9 配置简单记录

    ubuntu bind9 配置简单记录 ubuntu版本:Ubuntu 12.04.2 bind9安装:apt-get install bind9 bind9配置文件目录:/etc/bind bind ...

  3. 简单记录一下fabric版本1.4的环境搭建,

    简单记录一下fabric版本1.4的环境搭建,运行环境为Ubuntu18.04,其中一些内容是根据官方文档整理的,如有错误欢迎批评指正. 本文只介绍最简单的环境搭建方法,具体的环境搭建解析在这里深入解 ...

  4. oracle 9i 手工建库,简单记录Oracle 9i数据库手工建库过程

    简单记录Oracle 9i数据库手工建库过程Oracle 9i手工建库 By Oracle老菜 今天客户要用oracle 9.2.0.5,aix 6.1已经不支持了,只好从别的数据库把软件拷贝过来重编 ...

  5. mysql signal函数_MySQL:简单记录信号处理

    码版本:5.7.29 简单记录信号如何生效的.poll收到信号后如何中断后如何处理的,需要确认. --- ###一 初始化信号处理方式,设置信号的处理的处理方式,屏蔽某些信号,并且继承到子线程(pth ...

  6. 简单记录双系统安装Ububtu22.04

    简单记录双系统安装Ububtu22.04 tag: #Linux #Ubuntu 双系统安装Ububtu22.04 设备:R9000P 2021 系统:win11 + ubuntu22.04 1.制作 ...

  7. 关于majaro安装后的配置,简单记录 机型华硕FZ53v

    关于majaro安装后的配置,简单记录 机型华硕FZ53v 关于majaro安装后的配置,简单记录 机型华硕FZ53v 关于majaro安装后的配置,简单记录 机型华硕FZ53v ##关于v2ray配 ...

  8. 简单记录下几家公司的面试经历(Java一年经验)

    一年经验,记录下最近几家公司的面试经历. 1.深圳缇铭科技有限公司 1)先让自我介绍,讲一下最近的项目 根据项目提问,比如: redis你是如何部署的?你的code是直接套用他们的模板去编写,还是自己 ...

  9. git版本回退简单记录

    简单记录git版本回退的命令,参考的是这篇文章1 首先查看以前存档的版本: git log 1. 知道要回退的版本和现在的版本差了多少代 回退上一代版本(1个以前) git reset –hard H ...

最新文章

  1. 英伟达十年力作:新一代光线追踪显卡 Quadro RTX及核心架构Turing,可支持AI运算...
  2. Asp.Net细节性问题技巧精萃(转载)
  3. Android高通平台调试Camera驱动全纪录
  4. Dubbo源码分析(三)Dubbo中的SPI和自适应扩展机制
  5. Python Study:GUI-Tkinter
  6. LiveQing直播点播存储流媒体服务-服务器并发性能及消耗带宽计算参考
  7. 【ArcGIS遇上Python】ArcGIS Python获取某个字段的唯一值(获取指定字段的不同属性值)
  8. 20个让Web Developer开发生涯更加轻松的工具
  9. 人造电子皮肤、软体机器人、单孔腔镜手术机器人......青年科学家们都在研究哪些“黑科技”?...
  10. jquery的img的动态title换行
  11. linux开关机日志文件,Linux开关机命令(shutdown,reboot,halt,init)
  12. oracle 11g新特性之IPS Packing demonstration
  13. 关于Idea模块化部署web项目,Web Resource Directories作用
  14. jQuery中使用data()方法读取HTML5自定义属性data-*实例
  15. 档案管理学 | 档案实体管理概论
  16. 密码生成器(C语言实现)
  17. 百度地图的一些踩坑 marker网络图片不显示
  18. R语言逻辑回归logistic regression对用户收入进行预测
  19. 稳若磐石的「云上奥运」背后,是云计算新界面的崛起
  20. 网站后台拿webshell

热门文章

  1. php源码安全加密之PHP混淆算法.
  2. 虚拟化--006 VCAC的sso配置成功
  3. 友盟数据—值得手游创业者关注的玩家数据
  4. Get/POST方法提交的长度限制
  5. oracle 求A中不存在于B的记录
  6. iOS学习笔记--01swift实现提示框第三方库:MBProgressHUD
  7. 退信之550 5.7.1 Unable to relay for *@*.com
  8. git github 快速入门
  9. 【TCP/IP协议 卷一:协议】第三章 IP:网际协议
  10. saltstack源码安装nrpe