Java裁圖(im4Java)

天天發表於2013-08-19



ImageMagick和im4java處理圖片,im4java是ImageMagick的一個Java開源介面,使用起來非常方便。 
很多網站都會用到對圖片的一些處理,包括圖片的裁剪、給圖片加水印、按比例縮放圖片等操作,用ImageMagick實現這些功能,效能非常好,圖片還不會失真,聚資庫網站,上傳圖片的時候,就是用的這個實現的。 
首先要安裝ImageMagick這個工具,安裝好這個工具後,再下載im4java包放到專案lib目錄裡就行了。


注意事項:如果是在windows下執行,則需要配置ImageMagick的路徑,如果是在linux平臺下,則不需要配置。


import java.io.IOException;


import org.im4java.core.ConvertCmd;
import org.im4java.core.IM4JavaException;
import org.im4java.core.IMOperation;
import org.im4java.core.IMOps;




public class CutPic {


    public static String imageMagickPath = null;
    static{
        
        imageMagickPath="C:\\ImageMagick-6.6.5-Q16 ";
    }
    /**
     * 根據座標裁剪圖片
     *
     * @param srcPath   要裁剪圖片的路徑
     * @param newPath   裁剪圖片後的路徑
     * @param x   起始橫座標
     * @param y   起始挫座標
     * @param x1  結束橫座標
     * @param y1  結束挫座標
     */
    public static void cutImage(String srcPath, String newPath, int x, int y, int x1,
            int y1)  throws Exception {
        int width = x1 - x;
        int height = y1 - y;
        IMOperation op = new IMOperation();
        op.addImage(srcPath);
         
        /**
         * width:裁剪的寬度
         * height:裁剪的高度
         * x:裁剪的橫座標
         * y:裁剪的挫座標
         */
        op.crop(width, height, x, y);
         
        op.addImage(newPath);
         
        ConvertCmd convert = new ConvertCmd();
         
        //linux下不要設定此值,不然會報錯
        //convert.setSearchPath(imageMagickPath);
        convert.run(op);
    }
    /**
     * 根據尺寸縮放圖片
     * @param width  縮放後的圖片寬度
     * @param height  縮放後的圖片高度
     * @param srcPath   源圖片路徑
     * @param newPath   縮放後圖片的路徑
     */
    public static void cutImage(int width, int height, String srcPath, String newPath) throws Exception {
        IMOperation op = new IMOperation();
        op.addImage(srcPath);
         
         
        op.resize(width, height);
        op.addImage(newPath);
 
         
        ConvertCmd convert = new ConvertCmd();
         
        //linux下不要設定此值,不然會報錯
        //convert.setSearchPath(imageMagickPath);
         
        convert.run(op);
    }
    /**
     * 根據寬度縮放圖片
     * @param width  縮放後的圖片寬度
     * @param srcPath   源圖片路徑
     * @param newPath   縮放後圖片的路徑
     */
    public static void cutImage(int width, String srcPath, String newPath) throws Exception {
        IMOperation op = new IMOperation();
        op.addImage(srcPath);
         
         
        op.resize(width, null);
        op.addImage(newPath);
         
        ConvertCmd convert = new ConvertCmd();
         
        //linux下不要設定此值,不然會報錯
        //convert.setSearchPath(imageMagickPath);
         
        convert.run(op);
    }
    
    /**
     * 給圖片加水印
     * @param srcPath   源圖片路徑
     */
    public static void addImgText(String srcPath) throws Exception {
        IMOperation op = new IMOperation();
        op.font("宋體").gravity("southeast").pointsize(18).fill("#BCBFC8").draw("text 5,5 juziku.com");      
         
        op.addImage();
        op.addImage();
        ConvertCmd convert = new ConvertCmd();
         
        //linux下不要設定此值,不然會報錯
        //convert.setSearchPath(imageMagickPath);
 
        convert.run(op,srcPath,srcPath);
    }


相關文章