使用ImageIO.write jpg文件时出现问题:粉红色背景[关闭]
image-processing
java
15
0

我正在使用以下代码编写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是粉红色的背景图像:

替代文字

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

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

   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版本。

收藏
评论

这对我有用:

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);
收藏
评论

您可以通过使用Toolkit.createImage(url)而不是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的质量。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题