1. 程式人生 > >解決java 圖片壓縮圖片圖片變色問題

解決java 圖片壓縮圖片圖片變色問題

最近有人遇到在處理在用Java進行圖片壓縮的時候,壓縮後圖片的背景色發生了變色,如圖所示:

壓縮前:

壓縮後:

經查閱相關資料後發現可以用阿里巴巴的SImpleImage可以解決這個問題。

主要依賴以下jar包:commons-io-2.4.jar、commons-lang.jar、commons-logging-1.1.1.jar、jai_codec-1.1.3.jar、jai_core-1.1.3.jar

測試程式碼:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.commons.io.IOUtils;
import com.alibaba.simpleimage.ImageRender;
import com.alibaba.simpleimage.SimpleImageException;
import com.alibaba.simpleimage.render.ReadRender;
import com.alibaba.simpleimage.render.ScaleParameter;
import com.alibaba.simpleimage.render.ScaleRender;
import com.alibaba.simpleimage.render.WriteRender;
 
public class Example {
 
    public static void main(String[] args) { 
        File in = new File("E:/20111014111307895.jpg");      //原圖片
        File out = new File("E:/testImage.jpg");       //目的圖片
        ScaleParameter scaleParam = new ScaleParameter(400, 400);  //將影象縮略到1024x1024以內,不足1024x1024則不做任何處理
         
        FileInputStream inStream = null;
        FileOutputStream outStream = null;
        WriteRender wr = null;
        try {
            inStream = new FileInputStream(in);
            outStream = new FileOutputStream(out);
            ImageRender rr = new ReadRender(inStream);
            ImageRender sr = new ScaleRender(rr, scaleParam);
            wr = new WriteRender(sr, outStream);
         
            wr.render();                            //觸發影象處理
        } catch(Exception e) {
            e.printStackTrace();
        } finally {
            IOUtils.closeQuietly(inStream);         //圖片檔案輸入輸出流必須記得關閉
            IOUtils.closeQuietly(outStream);
            if (wr != null) {
                try {
                    wr.dispose();                   //釋放simpleImage的內部資源
                } catch (SimpleImageException ignore) {
                    // skip ... 
                }
            }
        }
    }
}
執行測試程式碼後結果如圖所示:

壓縮前:800*407

壓縮後:400*400