Java:BufferedImage到字节数组并返回
我看到一些人有类似的问题,但我还没有find我正在寻找的东西。
所以,我有一个方法读取input图像,并将其转换为字节数组:
File imgPath = new File(ImageName); BufferedImage bufferedImage = ImageIO.read(imgPath); WritableRaster raster = bufferedImage .getRaster(); DataBufferByte data = (DataBufferByte) raster.getDataBuffer();
我现在想要做的是将其转换回BufferedImage(我有一个应用程序,我需要这个function)。 请注意,“testing”是字节数组。
BufferedImage img = ImageIO.read(new ByteArrayInputStream(test)); File outputfile = new File("src/image.jpg"); ImageIO.write(img,"jpg",outputfile);
但是,这会返回以下exception:
Exception in thread "main" java.lang.IllegalArgumentException: im == null!
这是因为BufferedImage img为空。 我认为这与事实有关,在从BufferedImage到字节数组的原始转换中,信息被改变/丢失,使得数据不能再被识别为jpg。
有没有人有任何build议如何解决这个问题? 将不胜感激。
build议将其转换为字节数组
ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write(img, "jpg", baos); byte[] bytes = baos.toByteArray();
请注意,调用close
或flush
将什么也不做,你可以通过查看他们的source / doc来看到这个:
closures一个ByteArrayOutputStream没有效果。
OutputStream的flush方法什么都不做。
因此使用这样的东西:
ByteArrayOutputStream baos = new ByteArrayOutputStream(THINK_ABOUT_SIZE_HINT); boolean foundWriter = ImageIO.write(bufferedImage, "jpg", baos); assert foundWriter; // Not sure about this... with jpg it may work but other formats ? byte[] bytes = baos.toByteArray();
以下是关于尺寸提示的几个链接:
- Java:内存高效的ByteArrayOutputStream
- 每像素jpg位