【发布时间】:2012-01-20 14:17:40
【问题描述】:
我正在尝试将 BufferedImage 转换为字节数组。我有两个条件。 1.我不应该失去图像的质量。 2. 字节数组的大小要和实际图片一样。我尝试了几个选项。
选项 1:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "png", baos);
baos.flush();
byte[] imageBytes = baos.toByteArray();
baos.close();
选项 2:
WritableRaster raster = image.getRaster();
DataBufferByte data = (DataBufferByte) raster.getDataBuffer();
byte[] imageBytes = data.getData();
这两个选项都会增加图片的大小(对于大图片来说是两倍以上)。
感谢任何帮助。谢谢!
【问题讨论】:
-
我添加了
java标签。希望这是正确的(似乎)...... -
如何定义图片的大小?包含该图像的文件的大小?持有它的
Image实例使用的内存?如果是前者,那取决于你存储它的格式。如果是后者,那取决于实现。另外,您正在创建的byte[]s 的大小与源图像的“大小”是多少? -
“字节数组的大小应该与实际图像相同” 这似乎是一个相当随意的要求。谁指定的,你的老师?
-
@AndrewThompson - 我正在将上传的图像转换为字节数组以将其存储在亚马逊服务器上。我为用户上传的图像设置了 5MB 的大小限制。因此,如果用户上传大小为 4.99MB 的图像,我希望将其存储在亚马逊服务器上。希望您现在看到此要求的重要性。 :)
-
@sure_render - 如果原始文件大小已经可以接受,为什么还要通过 BufferedImage? (为什么不只是在收到字节时传递它们?)
标签: java bytearray bufferedimage