日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 图片合成 红色失真_Java - 处理某些图片泛红

發布時間:2023/12/10 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 图片合成 红色失真_Java - 处理某些图片泛红 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考博文:

http://blog.csdn.net/kobejayandy/article/details/44346809

http://blog.csdn.net/shixing_11/article/details/6897871

http://blog.csdn.net/cuihailiang/article/details/52037389

問題現象:

Java上傳圖片時,對某些圖片進行縮放、裁剪或者生成縮略圖時會蒙上一層紅色,經過檢查只要經過ImageIO.read()方法讀取后再保存,該圖片便已經變成紅圖。因此,可以推測直接原因在于ImageIO.read()方法加載圖片的過程存在問題。

1 public static BufferedImage getImages(byte[] data) throwsIOException {2 ByteArrayInputStream input = newByteArrayInputStream(data);3 returnImageIO.read(input);4 }

經過查閱得知ImageIO.read()方法讀取圖片時可能存在不正確處理圖片ICC信息的問題,ICC為JPEG圖片格式中的一種頭部信息,導致渲染圖片前景色時蒙上一層紅色。

解決方案:

1、使用awt?Toolkit

不再使用ImageIO.read()方法加載圖片,而使用JDK中提供的Image src=Toolkit.getDefaultToolkit().getImage

Image src = Toolkit.getDefaultToolkit().getImage(file.getPath());

BufferedImage image= BufferedImageBuilder.toBufferedImage(src);//Image to BufferedImage

或者Toolkit.getDefaultToolkit().createImage

1 Image imageTookit =Toolkit.getDefaultToolkit().createImage(bytes);2 BufferedImage cutImage = BufferedImageBuilder.toBufferedImage(imageTookit);

BufferedImageBuilder源碼:

public staticBufferedImage toBufferedImage(Image image) {if (image instanceofBufferedImage) {return(BufferedImage) image;

}//This code ensures that all the pixels in the image are loaded

image = newImageIcon(image).getImage();

BufferedImage bimage= null;

GraphicsEnvironment ge=GraphicsEnvironment

.getLocalGraphicsEnvironment();try{int transparency =Transparency.OPAQUE;

GraphicsDevice gs=ge.getDefaultScreenDevice();

GraphicsConfiguration gc=gs.getDefaultConfiguration();

bimage= gc.createCompatibleImage(image.getWidth(null),

image.getHeight(null), transparency);

}catch(HeadlessException e) {//The system does not have a screen

}if (bimage == null) {//Create a buffered image using the default color model

int type =BufferedImage.TYPE_INT_RGB;

bimage= new BufferedImage(image.getWidth(null),

image.getHeight(null), type);

}//Copy image to buffered image

Graphics g =bimage.createGraphics();//Paint the image onto the buffered image

g.drawImage(image, 0, 0, null);

g.dispose();returnbimage;

}

如果該方法在Windows平臺下使用正常,而在Linux平臺上總是報異常,這種解決方式可以參考:http://blog.csdn.net/shixing_11/article/details/6897871/

2、使用阿里巴巴的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

SimpleImage github地址:https://github.com/alibaba/simpleimage

相關jar包下載:http://download.csdn.net/detail/asd1231510/8911263

測試代碼:

1 packagecom.sup.test;2

3 importjava.io.File;4 importjava.io.FileInputStream;5 importjava.io.FileOutputStream;6

7 importorg.apache.commons.io.IOUtils;8

9 importcom.alibaba.simpleimage.ImageRender;10 importcom.alibaba.simpleimage.SimpleImageException;11 importcom.alibaba.simpleimage.render.ReadRender;12 importcom.alibaba.simpleimage.render.ScaleParameter;13 importcom.alibaba.simpleimage.render.ScaleRender;14 importcom.alibaba.simpleimage.render.WriteRender;15

16 public classExample {17

18 public static voidcompressPicAlibaba (String srcFilePath, String descFilePath) {19 File in = new File(srcFilePath); //原圖片

20 File out = new File(descFilePath); //目的圖片

21 ScaleParameter scaleParam = newScaleParameter();22

23 FileInputStream inStream = null;24 FileOutputStream outStream = null;25 WriteRender wr = null;26 try{27 inStream = newFileInputStream(in);28 outStream = newFileOutputStream(out);29 ImageRender rr = newReadRender(inStream);30 ImageRender sr = newScaleRender(rr, scaleParam);31 wr = newWriteRender(sr, outStream);32

33 wr.render(); //觸發圖像處理

34 } catch(Exception e) {35 e.printStackTrace();36 } finally{37 IOUtils.closeQuietly(inStream); //圖片文件輸入輸出流必須記得關閉

38 IOUtils.closeQuietly(outStream);39 if (wr != null) {40 try{41 wr.dispose(); //釋放simpleImage的內部資源

42 } catch(SimpleImageException ignore) {43 //skip ...

44 }45 }46 }47 }48

49 public static voidmain(String[] args) {50

51 String srcFilePath = "F:\\qw.jpg";52 String descFilePath = "F:\\qw2.jpg";53 compressPicAlibaba(srcFilePath, descFilePath);54

55 }56

57 }

總結

以上是生活随笔為你收集整理的java 图片合成 红色失真_Java - 处理某些图片泛红的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。