Java处理某些图片红色问题

百度了  微信平台上传图片变红  找到这个解决办法

问题现象:

Java上传图片时,对某些图片进行缩放、裁剪或者生成缩略图时会蒙上一层红色,经过检查只要经过ImageIO.read()方法读取后再保存,该图片便已经变成红图。因此,可以推测直接原因在于ImageIO.read()方法加载图片的过程存在问题。

[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()方法读取图片时可能存在不正确处理图片ICC信息的问题,ICC为JPEG图片格式中的一种头部信息,导致渲染图片前景色时蒙上一层红色。

解决方案:

不再使用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, 0, 0, null);
  29. g.dispose();
  30. return bimage;
  31. }

参考:

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

时间: 2024-10-07 04:19:26

Java处理某些图片红色问题的相关文章

Java部分总结图片版2(已加上原图链接!!!)

Java部分总结图片版2(加上原图链接)

java 获取网络地址图片

收藏一个获取网络图片的方法. 1 //获取网络图片 2 public void ImageRequest(String ImageName,String GifUrl) throws Exception { 3 //new一个URL对象 4 URL url = new URL(GifUrl); 5 //打开链接 6 HttpURLConnection conn = (HttpURLConnection)url.openConnection(); 7 //设置请求方式为"GET" 8 c

导入java项目时出现红色叹号问题的解决

问题:导入java项目时出现红色叹号(如下图所示) 原因:引入项目的某些jar包跟自己电脑上的位置不一样: 解决方案:步骤如下 (1)右键红色叹号所在项目————>build path————>Configure Build Path 出现下面窗口: (2)remove掉带红叉的选项:JRE System Library[jdk.7.0.72](unbound),然后Add Library(如下图): (3)选中 JRE System Library ————>next(如下图所示):

coco2dx jni 调用 java 相机返回 图片数据

新建 一个项目 名字:testJin  包名:com.TanSon.org  python命令:python create_project.py -project testJin -package com.TanSon.org -language cpp eclipse 导入项目配置 ... 略去,(可以google) 1 c++ 调用 andriod 1.1 包含头文件 #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) #include <jni.

java blob存取图片

1. 存入图片 Connection con=db.conn; PreparedStatement pstmt; //File file = upload; FileInputStream inputImage = new FileInputStream(upload); byte[] buf = new byte[inputImage.available()]; inputImage.read(buf); con.setAutoCommit(false); System.out.println

Java部分总结图片版(已经加上原图链接下载!!!)

Java基础知识图片版(原图下载链接)

java实现的图片缩放 压缩 裁剪工具!找了很久,市面上再也找不到比它缩放效果还好的代码了

原文:java实现的图片缩放 压缩 裁剪工具!找了很久,市面上再也找不到比它缩放效果还好的代码了 源代码下载地址:http://www.zuidaima.com/share/1550463380458496.htm 纯 java 实现的 图片缩放 压缩 裁剪工具!不依赖任何第三方 jar 包 1. 找了很久,市面上再也找不到比它缩放效果还好的代码了 (再不使用任何第三方组件的前提下) 2. 支持缩放 3. 支持剪切 (例如:用户上传头像后剪切成正方形小图) /* * Copyright 2012

Java处理JPEG图片时,需要导入com.sun.image.codec.jpeg.JPEGImageEn,报错处理

Java处理JPEG图片时,需要导入com.sun.image.codec.jpeg.JPEGImageEn,会报错,不能使用相应的方法. 原因:java访问限制级api的时候,默认的eclipse设置会报错,现在更改只警告,不报错,就可以使用了.. 默认把这些访问受限的API当成了错误来处理. 解决办法: 在MyEclipse中点Window-->Preferences-->Java-->Compiler-->Errors/Warnings,展开Deprecated and re

利用java实现简单图片的计数器

利用java实现简单图片的计数器,运行图: 想学习更多关于java的知识,可以点击<Java EE软件工程师>进行学习. <%@ page contentType="text/html;charset=gb2312"%><%@ page language="java" import="java.io.*"%> <html><head><meta http-equiv="C