ImageMagick图片处理简介

ImageMagick图片处理简介

环境搭建

准备工作

  1. 下载ImageMagick,点击这里。我是Mac版本:ImageMagick-x86_64-apple-darwin15.4.0.tar.gz
  2. 解压 tar -zxvf ImageMagick-x86_64-apple-darwin15.4.0.tar.gz
  3. 配置环境变量vim .bash_profile。下面的配置将$HOME替换为ImageMagick安装目录

    • export MAGICK_HOME=$HOME/ImageMagick-7.0.1
    • export PATH=${MAGICK_HOME}/bin:$PATH
    • export DYLD_LIBRARY_PATH=$MAGICK_HOME/lib/

  4. 更新环境变量 source .bash-profile

  5. 检测是否安装成功 convert -version

使用CommandLine

这里演示几个参数的使用,更多的使用举例请见参考部分

1.压缩尺寸和图片质量

convert -resize 100x100 -quality 75%
T1AzEQBbLT1RCvBVdK.jpg T1AzEQBbLT1RCvBVdK_100_100_75.jpg

2.水印命令composite

composite -gravity SouthEast vi-mode.gif gallery8.jpg :overlay.jpg

overlay-small.jpg

Java代码调用

java的客户端有两个,JMagickIm4JavaJMagick是面向对象的包装,只实现了IM的部分功能。而Im4Java更纯粹,它只是拼接好command语句,丢给IM执行。所以性能更好,也更加的灵活。这里以Im4Java为例,演示resize功能。

POM引用

1
2
3
4
5
6
<!-- https://mvnrepository.com/artifact/org.im4java/im4java -->
<dependency>
<groupId>org.im4java</groupId>
<artifactId>im4java</artifactId>
<version>1.4.0</version>
</dependency>

java类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.zhaoyangwoo.utils;
import org.im4java.core.ConvertCmd;
import org.im4java.core.IM4JavaException;
import org.im4java.core.IMOperation;
import java.io.IOException;
/**
* Created by john on 16/12/19.
*/
public class ImgUtil {
public static void main(String[] args) throws IOException, IM4JavaException, InterruptedException {
ConvertCmd cmd = new ConvertCmd();
IMOperation op = new IMOperation();
op.addImage("/Users/john/Downloads/T1AzEQBbLT1RCvBVdK.jpg");
op.resize(800, 600);
op.addImage("/Users/john/Downloads/T1AzEQBbLT1RCvBVdK_small.jpg");
cmd.run(op);
}
}

执行看看!报错了~

Exception in thread “main” org.im4java.core.CommandException:
org.im4java.core.CommandException: dyld: Library not loaded: /
ImageMagick-7.0.1/lib/libMagickCore-7.Q16HDRI.0.dylib

可能是im4java的内部引用了绝对地址,解决的方案是建立这个路径软连接。在根目录上操作需要root权限。

1
2
sudo su
ln -s /Applications/Develop/ImageMagick-7.0.1 ImageMagick-7.0.1

再执行就没问题了

参考

作者: wuzhaoyang(John)
出处: http://wuzhaoyang.me/
因为作者水平有限,无法保证每句话都是对的,但能保证不复制粘贴,每句话经过推敲。希望能表达自己对于技术的态度,做一名优秀的软件工程师。