經過在網上的各種搜羅,終於搞定了,記錄一下,有些地方需要使用root許可權的,就sudo了:
(一)請先確保系統已經安裝以下包:
rpm -q libjpeg libjpeg-devel libpng libpng-devel libtiff libtiff-devel libungif libungif-devel perl-CPAN perl make gcc
或者直接用以下命令安裝
yum install libjpeg
yum install libjpeg-devel
yum install libpng
yum install libpng-devel
yum install libtiff
yum install libtiff-devel
yum install libungif
yum install libungif-devel
yum install perl-CPAN
(例如,如果沒安裝perl-CPAN,則後面會報錯Can't locate ExtUtils/MakeMaker.pm)
(二)安裝ImageMagick,最好保證ImageMagick和JMagic版本一致
1. 下載ImageMagick-6.4.0-0.tar.gz from
wget http://downloads.jmagick.org/6.4.0/ImageMagick-6.4.0-0.tar.gz,
2. tar -xzvf ImageMagick-6.4.0-0.tar.gz
3. mkdir /usr/local/imagemagick
4. cd ImageMagick-6.4.0-0
5. ./configure --prefix=/usr/local/imagemagick/
6. 先make, 然後make install, 再vi /etc/profile, 在最後添加: export $PATH=$PATH:/usr/local/imagemagick/bin
以上安裝好之後使用以下方法校正是否安裝成功:check: convert 1.jpg -resize 50% 11.jpg
(三)安裝JMagick,最好保證ImageMagick和JMagic版本一致
1. 下載jmagick from http://downloads.jmagick.org/6.4.0/jmagick-6.4.0-src.tar.gz
2. tar -xzvf jmagick-6.4.0-src.tar.gz
3. cd jmagick-6.4.0-src
4. ./configure
5. make, make install
6. cd lib
#so檔案必須放在/usr/lib/ ,否則 java找不到.so庫檔案
7. cp *.so /usr/lib/ (我試過,只放一個so,貌似也可以,但是只是簡單測試,可能複雜的需要全面)
#把so庫檔案路徑載入到設定檔
8. vi /etc/ld.so.conf, add: /usr/local/imagemagick/lib
9. ldconfig #載入至庫檔案快取
(四)測試代碼:
package com.xingleilee;
import java.awt.Dimension;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import magick.ImageInfo;
import magick.MagickImage;
public class Test {
static {
// 不能漏掉這個,不然jmagick.jar的路徑找不到
System.setProperty("jmagick.systemclassloader", "no");
}
/**
* 壓縮圖片
*
* @param filePath
* 源檔案路徑
* @param toPath
* 縮圖路徑
*/
/**
* @param filePath
* @param toPath
* @throws Exception
*/
public static void createThumbnail(String filePath, String toPath)
throws Exception {
ImageInfo info = null;
MagickImage image = null;
Dimension imageDim = null;
MagickImage scaled = null;
try {
info = new ImageInfo(filePath);
image = new MagickImage(info);
imageDim = image.getDimension();
int wideth = imageDim.width;
int height = imageDim.height;
height = height/2;
wideth = wideth/2;
scaled = image.scaleImage(wideth, height);// 小圖片檔案的大小.
scaled.setFileName(toPath);
scaled.writeImage(info);
} catch (Exception e) {
System.out.println(filePath + "壓縮 excpeiton");
e.printStackTrace();
} finally {
if (image != null) {
image.destroyImages();
}
if (scaled != null) {
scaled.destroyImages();
}
}
}
/**
* @param args
*/
public static void main(String[] args) throws Exception {
String srcFile1 = "/home/xingleilee/Downloads/images/1.jpg";
String destFile1 = "/home/xingleilee/Downloads/images/";
String destFile11 = "/home/xingleilee/Downloads/images_dest/";
//start:2012-06-17 22:49:18
//end:2012-06-17 22:53:38
System.out.println("start:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime()));
for (int i = 0; i < 1000; i++) {
createThumbnail(destFile1 + i + "_dest.jpg", destFile11 + i + "_dest.jpg");
}
System.out.println("end:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime()));
}
}