zoukankan      html  css  js  c++  java
  • 图片处理GraphicsMagick & ImageMagick

    用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/

  • 相关阅读:
    Java的native关键字---JAVA下调用其他语言的关键词
    JAVA关键词synchronized的作用
    Ubuntu下安装android studio的时候,无法进入图形界面--/usr/lib/jdk1.8.0_60/jre/lib/i386/libawt_xawt.so: libXtst.so.6: 无法打开共享对象文件: 没有那个文件或目录
    安装XP和Ubuntu双系统问题——Ubuntu安装时无法识别原有系统
    耗时又繁重的SQL诊断优化,以后就都交给数据库自治服务DAS吧!
    阿里云发布政企安全加速解决方案 加码助力政企信息化安全
    Nacos 权限控制介绍及实战
    资深技术专家崮德在阿里管理研发团队的实践和思考
    容灾切换必备——全局流量管理介绍
    MaxCompute管家详解--管家助力,轻松玩转MaxCompute
  • 原文地址:https://www.cnblogs.com/bjfarmer/p/5581368.html
Copyright © 2011-2022 走看看