java-使用ImageIO.write jpg文件时出现问题:粉红色背景

我正在使用以下代码编写jpg文件:

String url="http://img01.taobaocdn.com/imgextra/i1/449400070/T2hbVwXj0XXXXXXXXX_!!449400070.jpg";

String to="D:/temp/result.jpg";

ImageIO.write(ImageIO.read(new URL(url)),"jpg", new File(to));

但我得到的result.jpg是粉红色的背景图片:

Koerr asked 2020-06-20T07:12:44Z

6个解决方案

38 votes

您可以通过使用Toolkit.createImage()而不是ImageIO.read(url)来解决此问题,后者使用解码算法的不同实现。

如果使用的是Sun JDK随附的JPEG编码器,则还必须确保将没有alpha通道的图像传递给它。

例:

private static final int[] RGB_MASKS = {0xFF0000, 0xFF00, 0xFF};

private static final ColorModel RGB_OPAQUE =

new DirectColorModel(32, RGB_MASKS[0], RGB_MASKS[1], RGB_MASKS[2]);

// ...

String sUrl="http://img01.taobaocdn.com/imgextra/i1/449400070/T2hbVwXj0XXXXXXXXX_!!449400070.jpg";

URL url = new URL(sUrl);

Image img = Toolkit.getDefaultToolkit().createImage(url);

PixelGrabber pg = new PixelGrabber(img, 0, 0, -1, -1, true);

pg.grabPixels();

int width = pg.getWidth(), height = pg.getHeight();

DataBuffer buffer = new DataBufferInt((int[]) pg.getPixels(), pg.getWidth() * pg.getHeight());

WritableRaster raster = Raster.createPackedRaster(buffer, width, height, width, RGB_MASKS, null);

BufferedImage bi = new BufferedImage(RGB_OPAQUE, raster, false, null);

String to = "D:/temp/result.jpg";

ImageIO.write(bi, "jpg", new File(to));

注意:我的猜测是颜色配置文件已损坏,并且Toolkit.createImage()会忽略所有颜色配置文件。 如果是这样,则会降低具有正确颜色配置文件的JPEG的质量。

finnw answered 2020-06-20T07:13:12Z

19 votes

我有类似的问题。 但是后来我用这个解决了

BufferedImage image = new BufferedImage(width, height,

BufferedImage.TYPE_INT_RGB);

//do something to populate the image

//such as

image.setRGB( x, y, pixelValue); //set your own pixels color

ImageIO.write(image, "jpg", new File("D:\\test.jpg"));

请注意,我正在使用Java版本1.6.0_25-b06而且一切正常。

也许您可以检查Java版本。

Wen answered 2020-06-20T07:13:41Z

12 votes

这对我有用:

int w = originalImage.getWidth();

int h = originalImage.getHeight();

BufferedImage newImage = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);

int[] rgb = originalImage.getRGB(0, 0, w, h, null, 0, w);

newImage.setRGB(0, 0, w, h, rgb, 0, w);

Claudio Rossetto answered 2020-06-20T07:14:02Z

1 votes

BufferedImage originalImage = ImageIO.read(getContent());

BufferedImage newImage = new BufferedImage(originalImage.getWidth(), originalImage.getHeight(), BufferedImage.TYPE_3BYTE_BGR);

for (int x = 0; x < originalImage.getWidth(); x++) {

for (int y = 0; y < originalImage.getHeight(); y++) {

newImage.setRGB(x, y, originalImage.getRGB(x, y));

}

}

这对我有用

hans moleman answered 2020-06-20T07:14:22Z

1 votes

在使用ImageIO读写图像时,我遇到了相同的问题。在阅读答案后,我将JRE从openjdk version "1.8.0_91"更改为HotSpot java version "1.8.0_102"。在finnw的答案中提示并不明显,但值得尝试;-)

这样问题就解决了! 因此,如果您使用的是OpenJDK JRE,并且可以自由更改JRE,则可以将其更改为HotSpot,而无需更改代码。

Bazi answered 2020-06-20T07:14:46Z

1 votes

对我来说,问题不在于阅读,而在于写作

ImageIO将愉快地从ARGB BufferedImages写入JPG文件

浏览器/其他程序然后将此4通道文件解释为CMYK颜色或某种颜色,从而导致此问题中所述的效果

我的解决方案:确保传递给ImageIO.write的BufferedImage是RGB类型(而不是ARGB)

这也解释了为什么仅在保存为jpeg时才出现问题,而在保存为png时才出现问题

我花了很长时间才弄清楚,因为我自己的图像工具总是实时转换为ARGB,所以我总是将ARGB图像传递给ImageIO.write,而没有意识到

Reto Höhener answered 2020-06-20T07:15:29Z

java imageio temp_java-使用ImageIO.write jpg文件时出现问题:粉红色背景相关推荐

  1. java properties 路径问题_Java 读取Properties文件时应注意的路径问题

    Java读取properties文件的方法比较多,网上最多的文章是"Java读取properties文件的六种方法",但在Java应用中,最常用还是通过java.lang.Clas ...

  2. excel文件下载下来损坏 js_使用Java / javascript和apache POI导出.xls文件时获取损坏的文件...

    我正在尝试从Web应用程序下载浏览器中的.xls文件.下面是相同的代码. try(FileInputStream inputStream = new FileInputStream("C:\ ...

  3. java imageio temp_Java ImageIO.setUseCache方法代碼示例

    本文整理匯總了Java中javax.imageio.ImageIO.setUseCache方法的典型用法代碼示例.如果您正苦於以下問題:Java ImageIO.setUseCache方法的具體用法? ...

  4. JAVA中 BufferedImage、ImageIO用法

    转载:JAVA中BufferedImage.ImageIO用法 - 邓维-java - 博客园 (cnblogs.com) BufferedImage          BufferedImage是其 ...

  5. Java 通过魔数判断上传文件的类型

    通过魔数值来校验文件类型主要是防止恶意修改等操作. 使用魔数值校验,不管是传入的文件有后缀名,还是无后缀名,或者修改了后缀名,真正获取到的才是该文件的实际类型,这样避免了一些想通过修改后缀名或者Con ...

  6. Java实现pdf转tex_使用Free Spire.PDF在Java程序中创建和转换PDF文件

    在这篇文章中,我将举例说明如何创建一个包含标题,段落,图像,编号列表和表格的简单的PDF文件,以及如何使用Free Spire.PDF将PDF转换为其他文件格式. 概述 Free Spire.PDF ...

  7. 在Java程序中创建和转换PDF文件

    点击上方关注 "终端研发部" 设为"星标",和你一起掌握更多数据库知识 作者: Codingqi123 来源: jianshu.com/p/db15232987 ...

  8. java 打开指定文件,java解决指定应用程序打开指定文件

    java解决指定应用程序打开指定文件 //打开工具的路径及名字 String toolsPath = "D:/office/Office12/WINWORD.EXE"; //被打开 ...

  9. 记录一次读取hdfs文件时出现的问题java.net.ConnectException: Connection refused

    公司的hadoop集群是之前的同事搭建的,我(小白一个)在spark shell中读取hdfs上的文件时,执行以下指令 >>> word=sc.textFile("hdfs ...

最新文章

  1. Runtime-消息发送和消息转发
  2. Guava API学习之Multimap
  3. 用MATLAB作图像识别所需要注意的细节!
  4. Socket.io发送消息含义
  5. 139邮箱的邮件附件功能
  6. oc引导win方法_[OC更新]机械革命X1/X6TIS标压测试版更新
  7. 15个创意示例教您如何自定义 404 错误页面
  8. C# 加载C++的dll
  9. 有了人脸识别和虹膜扫描,指纹传感器是不是就OUT了?究竟哪个更安全?
  10. 驱动程序和应用程序的区别_复仇者黑客组织—教你写第一个Linux设备驱动程序...
  11. 键盘上所有键位的ascii值
  12. 九节点潮流计算matlab,(完整版)电力系统分析大作业matlab三机九节点潮流计算报告...
  13. 沪深300傻瓜定投验证
  14. Endnote实用快捷键
  15. 温一壶月光下的酒——林清玄
  16. dne服务器没检测到有响应,设备或资源dns没检测到有响应 网络无法连接
  17. s:iterator各种遍历用法
  18. RN iOS 真机器调试
  19. vue工作日历考勤记录表
  20. 实训十二:路由器静态路由配置

热门文章

  1. debian宝塔界面安装php失败,debian-live-8.7.1 安装失败求助
  2. java线程的生命周期及wait(),notify(),notifyAll()的详解分析
  3. 排序算法(分类,时间复杂度)(快速排序,插入排序,希尔排序,选择排序,冒泡排序)
  4. import java.sql.*;问题:The package java.sql is not accessible
  5. iOS 各种手势用法
  6. 记一次微信小程序云函数操作Mysql数据库
  7. 自从自己搭建了这套精选壁纸聊天背景的微信小程序,我的手机背景图再都没重复过
  8. 迪赛智慧数——柱状图(象形柱图):水果VC含量排行榜
  9. 小小知识点(一):辨别性相似度(Discriminative Similarity)
  10. 资金流入流出预测—————第四部分