【问题标题】:Convert image byte[] to a file将图像 byte[] 转换为文件
【发布时间】:2011-11-04 21:15:29
【问题描述】:

我正在尝试将图像(png、jpg、tiff、gif)转换为磁盘上的文件。当我将其存储在文件中后查看它时,我看不到该文件。

这是我根据其他论坛讨论尝试过的一些代码:

byte[] inFileName = org.apache.commons.io.FileUtils.readFileToByteArray(new File("c:/test1.png"));

InputStream inputStream = new ByteArrayInputStream(inFilename);
..String fileName="test.png";
Writer writer = new FileWriter(fileName);
IOUtils.copy(inputStream, writer,"ISO-8859-1");

这会创建一个我看不到的 png 文件。

我根据其他一些讨论尝试使用 ImageIO,但无法使其正常工作。感谢任何帮助。

    Image inImage = ImageIO.read(new ByteArrayInputStream(inFilename));
BufferedImage outImage = new BufferedImage(100, 100,
            BufferedImage.TYPE_INT_RGB); 
 OutputStream os = new FileOutputStream(fileName);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);
//encoder.encode(inImage);

【问题讨论】:

标签: java image bytearray


【解决方案1】:

你想做什么;读取 PNG 图像并将其保存为 JPEG?

您的第一个代码 sn-p 不起作用,因为您正在使用 Writer 写入数据。 Writer 仅适用于编写文本文件。 PNG 和 JPEG 文件包含二进制数据,而不是文本。

您可以使用 ImageIO API 加载图像:

BufferedImage img = ImageIO.read(new File("C:/test.png"));

然后使用 ImageIO API 以另一种格式编写:

ImageIO.write(img, "jpg", new File("C:/test.jpg"));

【讨论】:

    【解决方案2】:

    你应该直接写给FileOutputStream

    InputStream input = new ByteArrayInputStream(bytes);
    OutputStream output = new FileOutputStream(fileName);
    IOUtils.copy(input, output);
    

    图像是二进制数据,而不是字符数据。你不应该使用Writer,它用于字符数据,但你应该使用OutputStream,它用于二进制数据。只要您不想操纵图像,BufferedImageJPEGImageEncoder 就毫无意义。

    【讨论】:

    • +1 因为我自己无法回答这个问题,所以在阅读代码后忙于重新连接我的下巴......
    • @BlausC 我有一个 Android 操作系统的用例,可以将 .png 图像复制为应用资产。因此,与其使用 Apache 库中的 IOUtils,您能否指出正确的方向,使用 Android 方法将图像字节复制到文件中,以便我可以使用 FileProvider() 与其他应用程序用户共享图像?我正在尝试将图像复制到应用程序内部存储目录中的文件。
    猜你喜欢
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    相关资源
    最近更新 更多