分享

ImageMagick的安装及使用

 ccccshq 2014-11-19

最近在使用ImageMagick处理酒店团购图片,写篇博客小小的总结下它的安装及用法。ImageMagick是一套功能强大且免费的图片处理开发包,可以用来读,写和处理多种格式的图片文件,总之很强大就是了,废话不多说了,马上来看看它的安装及用法。

1、安装

以linux下源码安装为例,首先到点击打开链接上下载最新的ImageMagick源码包,当前最新版本的源码包为ImageMagick-6.7.9-3.tar.gz,下载完毕后,开始进行安装。

首先进入文件下载目录,解压源码包:

  1. cd ./Downloads  
  2. tar xzvf ImageMagick-6.7.9-3.tar.gz  

文件解压完后,进入解压目录:

  1. cd ImageMagick-6.7.9-3/  

接下来就是安装三部曲了:

  1. ./configure   

在这个过程中,它会对系统的编译链接环境以及ImageMagick所依赖的第三方库进行检查,特别需要注意的是,ImageMagick在处理图片时需要依赖jpeg、png等第三方图片库,如果你的程序需要处理这些格式的图片,需要确保这些库已经正确的安装,./configure结束后会输出一个检查报告,如下图:

图中显示,在当前系统中没有安装jpeg第三方库,由于业务需要处理jpeg格式的图片,因此在安装ImageMagick之前,需要先安装好jpeg第三方库。到 点击打开链接上下载最新的源码包jpegsrc.v8d.tar.gz,安装过程和ImageMagick基本上一样,这里就不多说了。安装完jpeg库后,就可以继续安装ImageMagick了。

接下来就是编译源码以及安装了:

  1. make  
  2. sudo make install  

默认的ImageMagick会被安装到/usr/local路径下,安装成功后就可以在命令行模式下使用ImageMagick了。

2、命令行模式

ImageMagick最方便的地方就是可以在命令行模式下运行,结合shell脚本,我们可以进行非常复杂的图片操作,下面举几个简单的例子进行抛砖引玉。

(1) 图片格式转换:比如把目录下所有的jpeg格式的图片转化为png的,就可以如下进行操作:

  1. for pic in *.jpg  
  2. do  
  3. convert ${pic} `basename ${pic} .jpg`.png  
  4. done  

(2) 压缩图片大小:一般来说,在web应用中,如果图片很多或者很大,就需要考虑对图片大小进行适当的压缩,常用的压缩办法有:减小图片尺寸(图片缩放),调节压缩比或者去除图片中的多余信息。这些操作使用ImageMagick就可以轻易的完成:

  1. convert -resize 100x100 src.jpg des.jpg  

把src.jpg的图片大小调整为100x100,convert命令在调整图片高度和宽度的过程中会进行等比压缩,也就是说图片des.jpg的高宽比将会和src.jpg一致。

  1. convert -quality 75% src.jpg des.jpg  

压缩比越低,图片的大小越小,一般来说75%是最佳的压缩比,在这种情况下肉眼是很难看出图片的失真。

  1. convert -strip src.jpg dest.jpg  

数码相机在拍照的时候会在生成的图片中留下一些额外的信息,这些信息往往是没用的,可以使用convert –strip命令去除。

以上三种操作可以合在一起进行:

  1. convert -resize 100x100 –strip -quality 75% src.jpg dest.jpg  

ImageMagick功能十分强大,上面只是抛砖引玉,有兴趣的同学可以去挖掘其更多的功能和用法。

3、编程接口模式

除了命令行模式外,ImageMagick还提供了各种语言的编程接口,包括有c、c++、java、php和perl等等,下面以c++接口为例展示其使用方法。

ImageMagick的c++接口名称为Magick++,Magick++中有以下几个重要的对象:

Image:图片对象,Magick++中最重要的对象;

Geometry:Geometry包含了图片长度,宽度,偏移等信息;

Pixels:图片的像素对象

Color:图片的颜色对象

Blob:二进制数据大对象容器

  1. #include <Magick++.h>   
  2. #include <iostream>   
  3. using namespace std;   
  4. using namespace Magick;   
  5. int main(int argc, char **argv)   
  6. {   
  7.   InitializeMagick(*argv);  
  8.   
  9.   Image image;  
  10.   try {   
  11.     // 读入一个图片文件,把它存放在image对象中  
  12.     image.read( "src.jpg" );  
  13.   
  14.     // 把图片缩放到100x100的大小  
  15.     image.resize( Geometry(100,100) );  
  16.   
  17.     // 把缩放后的图片存放到文件  
  18.     image.write( "dest.jpg" );   
  19.   }   
  20.   catch( Exception &error_ )   
  21.     {   
  22.       cout << "Caught exception: " << error_.what() << endl;   
  23.       return 1;   
  24.     }   
  25.   return 0;   
  26. }   

从上面的例子可以看出Magick++的使用非常的简单,仅仅需要包含Magick++.h一个头文件就可以了, 它的所有api及对象都放在Magick的命名空间内,唯一需要注意的是Magick++在发生错误的时候会抛出异常,所以一定要使用try catch块捕获住异常,这点千万要记住。更具体的api文档可以参考下面的网址,使用文档介绍的非常详细,而且有各种例子,相信不会很难看懂:点击打开链接
另外编译的时候要-I/usr/local/include/ImageMagick ,-L/usr/local/lib,-lMagickCore -lm -lgomp -lpthread,学c++的都懂得,这里就不多说了

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多