用Java的ImageIO处理一个大于15M的JPG文件,内存溢出。

于是寻求新的解决方案,用ImageMagicK,发现处理图片速度不令人满意,于是切换至GraphicsMagicK,如下是总结。

GraphicsMagick is a fork of ImageMagick. GraphicsMagick has a number of advantages compared to ImageMagick, the most prominent is it's superior performance.”  -from im4java development guide.

如下是快速的总结:

GraphicsMagick(gm)是ImageMagick(im)派生出来的,性能好。

gm和im都需要安装依赖的库,才能处理如jpeg,png图片。

依赖的库有:zlib-1.2.8.tar.gz;libpng-1.6.23.tar.gz;jpegsrc.v9b.tar.gz, 需要首先安装。

ImageMagick安装直接可以用yum安装,如 list|grep -i imagemagick

GraphicsMagick安装需要本地编译安装,首先执行./configure 看看最后有没有png, jpeg, zlib.(重要)

GraphicsMagick与ImageMagick的安装相互独立,但依赖的包相同。

性能上,15Mjpg文件resize,gm快~20%(4U, 4G), 而在一台性能较差的虚拟机gm要比im快6倍(2U,1G),

图片越大,resize的尺寸越大,性能差别越明显。机器配置相差越大,性能差别越大。

性能测试对比

在一台2U1G VirtualBox Linux下resize一个15M的jpg图片。分别用gm和im进行操作,然后对比。

[root@testserver image]# uname -a
Linux testserver 2.6.32-431.el6.i686 #1 SMP Fri Nov 22 00:26:36 UTC 2013 i686 i686 i386 GNU/Linux

[root@testserver image]# free -m
             total       used       free     shared    buffers     cached
Mem:          1178        458        719          0         17        302
-/+ buffers/cache:        138       1039
Swap:         2015        137       1878
[root@testserver image]# gm identify test-bigjpg.jpg
test-bigjpg.jpg JPEG 9864x13703+0+0 DirectClass 8-bit 14.8Mi 0.000u 0:01

resize 操作对比:
[root@testserver image]# ./test.sh test-bigjpg.jpg 2048
elapsed 25s using gm
elapsed 154s using im

Identify -verbose 操作对比:

[root@testserver image]# identify -verbose 1464755573477_45.jpg
Image: 1464755573477_45.jpg
  Format: JPEG (Joint Photographic Experts Group JFIF format)
  Class: DirectClass
  Geometry: 13925x6459+0+0
  Resolution: 200x200
  Print size: 69.625x32.295
  Units: PixelsPerInch
  Type: ColorSeparation
  Endianess: Undefined
  Colorspace: CMYK
  Depth: 8-bit
  .....//此处省略
  User time: 5.940u
  Elapsed time: 0:34.689
  Version: ImageMagick 6.7.2-7 2016-05-09 Q16 http://www.imagemagick.org
[root@testserver image]# gm identify -verbose 1464755573477_45.jpg
Image: 1464755573477_45.jpg
  Format: JPEG (Joint Photographic Experts Group JFIF format)
  Geometry: 13925x6459
  Class: DirectClass
  Type: color separated
  Depth: 8 bits-per-pixel component
  ... //此处省略
  User Time: 6.580u
  Elapsed Time: 0:08
  Pixels Per Second: 11.8Mi

附上测试脚本的代码:

#!/bin/sh
starttime=`date '+%s'`
gm convert $1 -resize $2 $1.resize$2.jpg
stoptime=`date '+%s'`
echo elapsed `expr $stoptime - $starttime`s using gm starttime=`date '+%s'`
convert $1 -resize $2 $1.resize$2.jpg
stoptime=`date '+%s'`
echo elapsed `expr $stoptime - $starttime`s using im

Im4java

Im4java同时支持GM 和 IM

With im4java, you have three options if you want to use GraphicsMagick:

  • use GraphicsMagick explicitely, passing the command at object-creation: GraphicsMagickCmd cmd = new GraphicsMagickCmd("convert");.
  • use GraphicsMagick explicitely, using wrapper classes: ConvertCmd cmd = new ConvertCmd(true);.
  • decide at runtime: setting the system-property im4java.useGM to true will select GraphicsMagick at runtime. You can use this feature to compare the results and timings of both toolsets, provided that the commandline is compatible.

Reference:

GraphicsMagick: http://www.graphicsmagick.org/

ImageMagick:http://www.imagemagick.org/script/index.php

Delegatge lib: ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/delegates/

图片处理GraphicsMagick & ImageMagick的更多相关文章

  1. Node.js 引用 gm 包错误 Error: Could not execute GraphicsMagick/ImageMagick

    今天在学习前后台图像剪切时,下载了有图片剪切瑞士军刀之称的 GraphicsMagick. 给 gm.exe 配置了环境变量,在 npm 下好了 gm 的模块,但是运行却出现了错误. 错误如图: [E ...

  2. 使用GraphicsMagick/ImageMagick批量对图片瘦身

    GrahpicsMagick: find . -iname "*.jpg" -exec gm convert -strip +profile "*" -qual ...

  3. 图片处理服务 ImageMagick 的安装和使用

    简介 该文章使用目前官方最新版本7.0.8,这里只记录下Windows系统下的安装. 官方网站:http://www.imagemagick.org/script/index.php. ImageMa ...

  4. 图片工具GraphicsMagick的安装配置与基本使用

    本文使用GraphicsMagick的版本为1.3.18 (Released March 9, 2013). 1.简介 GraphicsMagick是一个短小精悍的的图片处理工具和库集合.对于Java ...

  5. GraphicsMagick / ImageMagick缺少lib报错no decode delegate for this image format

    下载相应的lib,编译安装就行了 cd ~ #下载包 wget http://www.imagemagick.org/download/delegates/zlib-1.2.7.tar.gz wget ...

  6. 【图片处理】ImageMagick, gm

    ImageMagick: Convert, Edit, Or Compose Bitmap Images http://www.imagemagick.org/script/binary-releas ...

  7. Linux图片查看软件ImageMagick安装

    在Linux中查看图片,这个需求是非常常见的.总不至于在集群中生成个图片,随便看下效果,也要用filezilla.winscp之类的远程文件传输工具导过来导过去吧,这样效率太低. Linux图片查看常 ...

  8. ImageMagick简介、GraphicsMagick、命令行使用示例

    http://elf8848.iteye.com/blog/382528 ImageMagick资料 ------------------------------------------------- ...

  9. ImageMagick资料

    ImageMagick资料 ---------------------------------------------------------------------------- ImageMagi ...

随机推荐

  1. php实验四

    实验四 1.创建一个Person类,Person中包含三个属性name,age,wealth,分别设置为public,private,protected,再定义Person类的子类Student. 2 ...

  2. 【转】Android中的事件分发和处理

    原文链接:http://www.apkbus.com/home.php?mod=space&uid=705730&do=blog&id=61207 上次跟大家分享了一下自定义V ...

  3. 【XLL 框架库函数】 QuitFramework

    去初使化框架库,简问题是才的重新初使化 XLOPER/XLOPER12. 参数 这个函数没有参数 属性值/返回值 这个函数没有返回值.

  4. PHP上传文件示例

    虽然大多数人认为Web只包含网页,但HTTP协议实际上可以传输任何文件,如office文档.PDF.可执行文件.AVI.压缩文件及各种其他文件类型.虽然FTP在历史上一直是向服务器上传文件的标准方式, ...

  5. 【Java EE 学习 29 下】【JDBC编程中操作Oracle数据库】【调用存储过程的方法】

    疑问:怎样判断存储过程执行之后返回值是否为空. 一.连接oracle数据库 1.需要的jar包:在安装的oracle中就有,所以不需要到官网下载,我的oracle11g下:D:\app\kdyzm\p ...

  6. RHCS 6.5 由于resource-agents-3.9.2-40.el6版本过低导致rgmanager[61164]: [fs] umount failed - REBOOTING问题的解决

    問題描述: RHEL 6.5版本RHCS在disable或者relocate service的時候,會導致節點重啟,查看日誌顯示umount掛载點失敗,日誌如下: Nov 29 16:03:50 ph ...

  7. ASP.Net 在Update Panel局部刷新后 重新绑定JS方法

    我们知道Asp.Net中的Update Panel可以完成页面的局部刷新(实质上是Ajax),但是局部刷新完后,此区域的控件上所绑定的JS方法就会失效,因为我们用如下方法来重新绑定. var prm ...

  8. 复利计算--结对项目<04-11-2016> 1.0.0 lastest 阶段性完工~

    结对项目:Web复利计算 搭档博客地址:25江志彬  http://www.cnblogs.com/qazwsxedcrfv/ 个人摘要: (2016-04-09-12:00)补充:之前传送门没做好, ...

  9. 坐标系统与投影变换及在ARCGIS中的应用

      首先提几个问题:是否有遇到坐标转换的问题?又是否有遇到投影转换的问题?坐标转换与投影转换有什么区别?下面看几个概念:1.地球椭球体( Ellipsoid,Spheroid)2.大地基准面( Geo ...

  10. Nagios配置文件详解

    首先要看看目前Nagios的主配置路径下有哪些文件.[root@nagios etc]# ll总用量 152-rwxrwxr-x. 1 nagios nagios 1825 9月  24 14:40 ...