本文主要介绍了如何在Java中将Image对象转换为byte数组,以及如何将byte数组还原为Image对象,这两个过程在处理网络图片传输时非常常见。 在Java编程中,有时我们需要将图像数据(Image对象)转换为字节数组(byte数组),以便在网络上传输或存储到数据库中。这是因为Image对象是Java AWT库中的一个图形对象,它不适合直接进行网络传输。另一方面,byte数组可以轻松地通过网络发送,并且占用更少的内存空间。下面我们将详细探讨这两种转换方法。 首先,我们来看如何将`Image`转换为`byte`数组: ```java public static byte[] imageToBytes(Image image, String format) { BufferedImage bImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_ARGB); Graphics bg = bImage.getGraphics(); bg.drawImage(image, 0, 0, null); bg.dispose(); ByteArrayOutputStream out = new ByteArrayOutputStream(); try { ImageIO.write(bImage, format, out); } catch (IOException e) { Log.log(null, "imageToBytes():" + e); } return out.toByteArray(); } ``` 这个方法首先创建了一个与原始Image对象具有相同尺寸的`BufferedImage`对象。然后,使用Graphics对象将原始Image绘制到BufferedImage上。绘制完成后,释放Graphics资源。接下来,使用`ImageIO.write()`方法将BufferedImage写入一个ByteArrayOutputStream,指定图像的格式(如"jpeg"或"png")。最后,将ByteArrayOutputStream的内容转换为byte数组并返回。 接下来,我们讨论如何将`byte`数组还原为`Image`对象: ```java public static Image bytesToImage(byte[] bytes) { Image image = Toolkit.getDefaultToolkit().createImage(bytes); try { MediaTracker mt = new MediaTracker(new Label()); mt.addImage(image, 0); mt.waitForAll(); } catch (InterruptedException e) { Log.log(null, "preloadResource():" + e); } return image; } ``` 在这个方法中,我们使用`Toolkit.getDefaultToolkit().createImage()`方法将byte数组直接转换为Image对象。为了确保图像完全加载,我们使用`MediaTracker`来跟踪图像的加载状态。一旦所有图像资源加载完成,我们就可以安全地返回Image对象。 在实际应用中,这种转换方式特别适用于网络图片的上传和下载。例如,用户从本地选择一张图片,程序会先将图片转换为byte数组,然后发送到服务器;服务器接收到byte数组后,再将其还原为Image对象并保存。同样,当从服务器获取图片时,服务器会将图片数据作为byte数组发送,客户端接收到后再转换回Image对象显示。 通过以上方法,我们可以方便地在Java中实现Image对象与byte数组之间的转换,这对于处理网络图片传输、存储和加载等场景至关重要。
/**
* 转换Image数据为byte数组
*
* @param image Image对象
* @param format image格式字符串.如"jpeg","png"
* @return byte数组
*/
public static byte[] imageToBytes(Image image, String format)
{
BufferedImage bImage = new BufferedImage(image.getWidth(null), image
.getHeight(null), BufferedImage.TYPE_INT_ARGB);
Graphics bg = bImage.getGraphics();
bg.drawImage(image, 0, 0, null);
bg.dispose();
ByteArrayOutputStream out = new ByteArrayOutputStream();
try
{
ImageIO.write(bImage, format, out);
}
catch (IOException e)
{
Log.log(null, "imageToBytes(): " + e);
}
return out.toByteArray();
}
/**
* 转换byte数组为Image
下载后可阅读完整内容,剩余1页未读,立即下载
- 粉丝: 1
- 资源: 9
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦