java imageio write,java – 使用ImageIO.write jpg文件的问题

你可以使用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的质量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
imageio.write()是Java中的一个方法,用于将图像写入指定的输出流或文件中。它的用法如下: 1. 导入相关类 ```java import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; ``` 2. 创建BufferedImage对象 ```java BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); ``` 3. 将图像数据写入BufferedImage对象中 ```java // TODO: 将图像数据写入BufferedImage对象中 ``` 4. 将BufferedImage对象写入文件或输出流中 ```java File output = new File("output.png"); try { ImageIO.write(image, "png", output); } catch (IOException e) { e.printStackTrace(); } ``` 其中,第一个参数image是要写入的BufferedImage对象,第二个参数是输出格式,第三个参数是输出的文件或输出流。 注意,ImageIO.write()方法支持的输出格式包括:BMP、GIF、JPEG、PNG、WBMP等。 完整示例代码: ```java import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; public class ImageIOWriteExample { public static void main(String[] args) { int width = 200; int height = 200; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { int rgb = (x + y) % 2 == 0 ? 0xFFFFFF : 0x000000; image.setRGB(x, y, rgb); } } File output = new File("output.png"); try { ImageIO.write(image, "png", output); } catch (IOException e) { e.printStackTrace(); } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值