开发者社区> 大坑神> 正文

JAVA处理不正确处理图片ICC信息蒙上红色的问题 放弃ImageIO.read()

简介: 问题现象: Java上传图片时,对某些图片进行缩放、裁剪或者生成缩略图时会蒙上一层红色,原因乃是ImageIO.read()方法读取图片时可能存在不正确处理图片ICC信息的问题,ICC为JPEG图片格式中的一种头部信息,导致渲染图片前景色时蒙上一层红色。 [java] view plain copy public stati
+关注继续查看

问题现象:

JAVA处理不正确处理图片ICC信息蒙上红色的问题现象

Java上传图片时,对某些图片进行缩放、裁剪或者生成缩略图时会蒙上一层红色原因乃是ImageIO.read()方法读取图片时可能存在不正确处理图片ICC信息的问题,ICC为JPEG图片格式中的一种头部信息,导致渲染图片前景色时蒙上一层红色。

[java] view plain copy
  1. public static BufferedImage getImages(byte[] data) throws IOException {  
  2.         ByteArrayInputStream input = new ByteArrayInputStream(data);  
  3.         return ImageIO.read(input);  
  4.     }  

解决方案:

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

[java] view plain copy
  1. Image src=Toolkit.getDefaultToolkit().getImage(file.getPath());  
  2. BufferedImage image=BufferedImageBuilder.toBufferedImage(src);//Image to BufferedImage  

或者Toolkit.getDefaultToolkit().createImage

[java] view plain copy
  1. Image imageTookit = Toolkit.getDefaultToolkit().createImage(bytes);  
  2. BufferedImage cutImage = BufferedImageBuilder.toBufferedImage(imageTookit);  

BufferedImageBuilder源码:

[java] view plain copy
  1. public static BufferedImage toBufferedImage(Image image) {  
  2.         if (image instanceof BufferedImage) {  
  3.             return (BufferedImage) image;  
  4.         }  
  5.         // This code ensures that all the pixels in the image are loaded  
  6.         image = new ImageIcon(image).getImage();  
  7.         BufferedImage bimage = null;  
  8.         GraphicsEnvironment ge = GraphicsEnvironment  
  9.                 .getLocalGraphicsEnvironment();  
  10.         try {  
  11.             int transparency = Transparency.OPAQUE;  
  12.             GraphicsDevice gs = ge.getDefaultScreenDevice();  
  13.             GraphicsConfiguration gc = gs.getDefaultConfiguration();  
  14.             bimage = gc.createCompatibleImage(image.getWidth(null),  
  15.                     image.getHeight(null), transparency);  
  16.         } catch (HeadlessException e) {  
  17.             // The system does not have a screen  
  18.         }  
  19.         if (bimage == null) {  
  20.             // Create a buffered image using the default color model  
  21.             int type = BufferedImage.TYPE_INT_RGB;  
  22.             bimage = new BufferedImage(image.getWidth(null),  
  23.                     image.getHeight(null), type);  
  24.         }  
  25.         // Copy image to buffered image  
  26.         Graphics g = bimage.createGraphics();  
  27.         // Paint the image onto the buffered image  
  28.         g.drawImage(image, 00null);  
  29.         g.dispose();  
  30.         return bimage;  
  31.     }

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
ClusterId read in ZooKeeper is null 处理
ClusterId read in ZooKeeper is null. Re-running the program after fixing issue 1 will result in the following error in the log file ...
2127 0
xcode反汇编调试iOS模拟器程序(六)函数出入口处的处理与局部变量
引用第二节的例子: 函数的入口处,通常都是把esp的值传给ebp保存,然后下面的操作以ebp为基准做偏移量引用。因为esp作为栈指针,push和pop都会自动修改其值,所以用ebp可以不受影响。
720 0
Ionic 中控件点击延迟的处理
原文发表于我的技术博客 本文分享了在 Ionic 中如何处理控件点击延迟的问题。原文发表于我的技术博客 1. 问题描述 在 Ionic 中,当在 iOS 环境下运行元素的点击事件时,你会发现点击响应事件会出现延迟的情况,此情况会造成用户的操作疑惑。
916 0
【WPF】【UWP】借鉴 asp.net core 管道处理模型打造图片缓存控件 ImageEx
原文:【WPF】【UWP】借鉴 asp.net core 管道处理模型打造图片缓存控件 ImageEx 在 Web 开发中,img 标签用来呈现图片,而且一般来说,浏览器是会对这些图片进行缓存的。 比如访问百度,我们可以发现,图片、脚本这种都是从缓存(内存缓存/磁盘缓存)中加载的,而不是再去访问一次百度的服务器,这样一方面改善了响应速度,另一方面也减轻了服务端的压力。
1168 0
php curl 分离header和body信息
php中可以通过curl来模拟http请求,同时可以获取http response header和body,当然也设置参数可以只获取其中的某一个。当设置同时获取response header和body时候,它们会一同作为结果返回。
1161 0
Java常见面试题:ThreadLocal对象处理
ThreadLocal的本身作用就是进行操作对象信息保存,但是它与传统的信息保存不同,它不仅仅保存的是一个引用对象,而且还保存有一个当前对象,也就是说进行数据保存的时候ThreadLocal更像Map集合。
2059 0
Apache Flink 零基础入门(五):流处理核心组件 Time&Window 深度解析
为什么要有 Window; Window 中的三个核心组件:WindowAssigner、Trigger 和 Evictor;Window 中怎么处理乱序数据,乱序数据是否允许延迟,以及怎么处理迟到的数据;最后我们梳理了整个 Window 的数据流程,以及 Window 中怎么保证 Exactly .
1001 0
+关注
大坑神
JAVA菜鸟工程师一枚
27
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载