将java.awt.Image对象转换为字节数组(`byte[]`)

将java.awt.Image对象转换为字节数组(`byte[]`),java,arrays,image,javax.imageio,Java,Arrays,Image,Javax.imageio,若我手头有一个对象,那个么如何获得图像数据的字节数组 如果我有子类,我可以这样做: ByteArrayOutputStream baos = new ByteArrayOutputStream() ; ImageIO.write( thumbnail , "jpeg" , baos ) ; baos.flush(); final byte[] bytes = baos.toByteArray() ; …其中采用一个-一个由buffereImage实现的接口,但不是由其超类java.awt.I

若我手头有一个对象,那个么如何获得图像数据的字节数组


如果我有子类,我可以这样做:

ByteArrayOutputStream baos = new ByteArrayOutputStream() ;
ImageIO.write( thumbnail , "jpeg" , baos ) ;
baos.flush();
final byte[] bytes = baos.toByteArray() ;
…其中采用一个-一个由
buffereImage
实现的接口,但不是由其超类
java.awt.Image
实现的接口


不幸的是,我没有手术室。在调用原始对象以获得缩小图像后,我手中只有一个对象。我试图获取该对象中的数据字节数组

您可以创建一个新的
BuffereImage
对象,然后通过调用
.getGraphics()
获取其图形对象,然后使用图形对象上的
.drawImage
将图像绘制到其中,然后将BuffereImage转换为PNG或JPG。

将图像绘制为
BuffereImage
-;)看起来更好的方法是使用一个库,例如或,而不是我发布此问题时使用的过时且麻烦的
java.awt.Image.getScaledInstance
路径。有关问题的讨论,请参阅发布于2007-2015的。您不必使用getScaledInstance。您可以使用,或者,当源是BuffereImage时,您可以使用@VGR
RescaleOp
“缩放”颜色样本值(使其变亮、变暗等),它不会更改图像尺寸。为此,请使用
AffineTransformOp
。否则,我会给你一个好建议。我仍然会使用像imgscalr这样的库来获得高质量的缩略图…:-)