Jmagick java 處理圖片

jopen 12年前發布 | 40K 次閱讀 Jmagick 圖形/圖像處理

在處理圖片的時候用到jmagick,起初以為引入一個pom依賴,就可以用java代碼直接操作了,誰知道一直報no JMagick in java.library.path錯誤。后來在網上查了一番資料發現,并不是那樣的,jmagick只是imagemagick的一個java封裝,imagemagick是用c++編寫的,所以這就用到了java的JNI進行本地庫的調用。

1.jmagick下載地址:http://downloads.jmagick.org/6.4.0 (目前最新版本是6.4.0),不過說實話里面只有doc,沒有demo,如果沒有資料,還真不知道怎么用,還好google夠強大,搜出了前輩們是怎么操作的。
2.imagemagick Windows下載地址:http://www.imagemagick.org/script/binary-releases.php#windows

這里我下的是Jmagick java 處理圖片

下好,解壓,將.DLL文件訪問System32的文件里,在把jar放入項目里,在測試當前類的時候寫一個靜態塊用來初始化java庫,System.setProperty(“jmagick.systemclassloader”, “no”);
下面上傳下圖片處理的java代碼:

/**處理圖片 */
public static void processImage(File source, File dest, double width, double height)
                                                                                    throws MagickException {
    MagickImage sourceImage = null;
    MagickImage destImage = null;
    try {
        ImageInfo info = new ImageInfo(source.getPath());
        //設置圖片質量
        info.setQuality(IMG_QUALITY);
        sourceImage = new MagickImage(info);
        Dimension dimension = sourceImage.getDimension();

        Double sourceWidth = dimension.getWidth();
        Double sourceHeight = dimension.getHeight();
        Double destWidth = null;
        Double destHeight = null;

        if (!dest.getParentFile().exists()) {
            dest.getParentFile().mkdirs();
        }
        if (width == 0 && height == 0) {
            width = sourceWidth;
            height = sourceHeight;
        }
        if (sourceWidth > sourceHeight) {
            destWidth = width;
            destHeight = width / sourceWidth * sourceHeight;
            if (destHeight > height && height != 0) {
                destHeight = height;
                destWidth = height / sourceHeight * sourceWidth;
            }
        } else {
            destHeight = height;
            destWidth = height / sourceHeight * sourceWidth;
            if (destWidth > width || height == 0) {
                destWidth = width;
                destHeight = width / sourceWidth * sourceHeight;
            }
        }
        destImage = sourceImage.zoomImage(destWidth.intValue(), destHeight.intValue());
        // .sharpenImage(SHARPEN_IMG_RADUIS, SHARPEN_IMG_SIGMA);
        //水平分辨率DPI
        destImage.setXResolution(IMG_XRES);
        //垂直分辨率DPI
        destImage.setYResolution(IMG_YRES);
        destImage.profileImage("*", null);
        //設置圖片壓縮
        destImage.setCompression(CompressionType.JPEGCompression);
        //設置對比度
        destImage.contrastImage(true);
        destImage.setFileName(dest.getPath());
        destImage.writeImage(info);
        info = null;
    } finally {
        if (destImage != null) {
            destImage.destroyImages();
        }
        if (sourceImage != null) {
            sourceImage.destroyImages();
        }
    }
}

這樣在windows 32bit下面,用java處理jmagick就完成了。但是有個問題,如果你是64bitjdk的話就有問題,Can't load IA 32-bit .dll on a AMD 64-bit platform這個錯誤就會出現,經過搜索,說是卸掉64bit換個32bit就可以了。但是我覺得有點不合適,所以又查了下,有個im4java,是imagemagick的另外一個java接口,im4java只是封裝ImageMagick的命令,所以不需要依賴dll,記錄完linux的實現方式之后,在回來說xiaim4java。

linux安裝:下載ImageMagick源碼包解壓

tar zvxf ImageMagick-6.4.0-0.tar.gz

cd ImageMagick-6.4.0-0

./configure --prefix=/opt360/ImageMagick-6.4.0 --with-quantum-depth=8   --enable-share

configure參數說明

–enable-shared 編譯成共享庫
–disable-static 不編譯成靜態庫
–disable-openmp 禁用多線程,使用多線程性能并沒有提高,但CPU占用達到了100%,所以禁用了。
–with-quantum-depth=8 使用8位色深。我的1200萬像素數碼相機,照出的圖片就是8位色深。
–with-windows-font-dir=目錄 ,指明字體文件的目錄(后面將人工復制中文字體文件到這個目錄)
關于Q8,Q16,Q32的說明:(建議使用8,現在數碼相機照的相片,每一種顏色就是8位深,3種顏色就是24位,所以選8)
支持的參數有3種,分別是 8, 16, or 32。默認值是16。
Q8表示: 8-bits per pixel quantum
Q16表示:16-bits per pixel quantum
Q32表示:32-bits per pixel quantum
安裝命令

make

make install

計算方式
使用16-bit per pixel quantums在處理圖片時比8-bit慢15%至50%,并須要更多的內存。
處理一張1024x768像素的圖片8-bit要使用3.6M內存,16-bit要使用7.2M內存。計算方法是: (5 * Quantum Depth * Rows * Columns) / 8
驗證支持的圖片格式:identify -list format
安裝jmagick
修改文件執行權限:chmod -R 777 filename

tar zvxf jmagick-6.4.0-src.tar.gz

cd jmagick-6.4.0-src

./configure --prefix=/opt360/jmagick-6.4.0 --with-java-home=/home/jdk/jdk1.6.0_12 -with-magick-home=/opt360/ImageMagick-6.4.0

make all

make install

記住jmagick-6.4.0.jar是使用前面你指定的jdk1.6編譯出來的,所以不能在jdk為1.5的環境下使用jmagick-6.4.0.jar
下面java代碼跟windows是一樣的。

參考以下文章:windows、linux利用jmagick處理圖片im4java與jmagick比較

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!