如何将字节数组作为图像文件存储在磁盘上?
Posted
技术标签:
【中文标题】如何将字节数组作为图像文件存储在磁盘上?【英文标题】:How to store a byte array as an image file on disk? 【发布时间】:2011-01-09 11:34:24 【问题描述】:我有一个图像的字节数组表示。如何将其作为图像文件保存在磁盘上。
我已经这样做了
OutputStream out = new FileOutputStream("a.jpg");
out.write(byteArray);
out.flush();
out.close();
但是当我通过双击打开图像时,它没有显示任何图像。
【问题讨论】:
你的意思是把它写成 PNG 或 JPG 格式,还是只是为了让你可以在某个时候读回来? 你有可以传递给 image.setRGB 的那种数组吗? 你从哪里得到字节[]?你需要知道它有什么格式(JPEG、GIF、PNG、BMP...) 我认为这与他的另一个问题有关:***.com/questions/2138961/… 【参考方案1】:除了没有使用 try/finally 块(至少在您显示的代码中)应该没问题。 (顺便说一句,如果您要关闭输出流,则不需要刷新它。)
由于它不起作用,这表明 byteArray
不实际上包含 JPEG 编码的图像。你是如何创建byteArray
的?如果它是“原始”表示,您可能想要对其进行编码,例如使用javax.imageio 包。
【讨论】:
你能不能也看看***.com/questions/2132657/… ........其实都建议我使用swing的MVC架构......但我不想要那个答案..我已经知道了...我想要一个建议或swing的示例示例,它的gui代码分为几个文件...这样我就可以找出我自己的问题.. . 我在谷歌上搜索了很多,但找不到任何这样的例子......【参考方案2】:您可以使用FileOutputStream 类:
FileOutputStream fos = new FileOutputStream("image.jpg");
try
fos.write(someByteArray);
finally
fos.close();
【讨论】:
【参考方案3】:您可以使用ImageIO API。
细节可能有点复杂,但首先您可能想要使用 TYPE_BYTE_INDEXED 类型和一些合适的 IndexColorModel 实例创建一个 BufferedImage。然后把你的字节数组放在那里。提示:您可以通过以下方式获得 BufferedImage 的内部表示:
myDataBuffer = myBufferedImage.getRaster().getDataBuffer();
这可能会返回一个 DataBufferByte 类型的数据缓冲区(检查!),您可以从中获得一个字节数组
myByteArray = ((DataBufferByte) myDataBuffer).getData();
然后你可以使用 System.arraycopy 将你的字节数组复制到上面。
【讨论】:
以上是关于如何将字节数组作为图像文件存储在磁盘上?的主要内容,如果未能解决你的问题,请参考以下文章
如何仅使用 javascript 将图像转换为字节数组以将图像存储在 sql server 上?