解決java 圖片壓縮圖片圖片變色問題
阿新 • • 發佈:2019-02-19
最近有人遇到在處理在用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