您可以通过使用不同的解码算法实现来解决此问题。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));
注意:我的猜测是颜色配置文件已损坏,并忽略所有颜色配置文件。如果是这样,那么这将降低具有正确颜色配置文件的JPEG的质量。Toolkit.createImage()