【问题标题】:encoding jpeg in java without disk writing在没有磁盘写入的情况下在java中编码jpeg
【发布时间】:2015-08-06 17:16:11
【问题描述】:

正如标题所说,我需要找到一些 java jpeg 编码器(源代码或外部库都很好),给定一个表示原始像素图像或 BufferedImage 的数组可以对其进行编码无需编写文件中的任何内容并可能通过某种数组返回编码图像,至少可以选择图像质量并且可能具有良好的效率。

注意:所需的数组/图像类型输入(字节、整数、argb、rgb、bgr、yuv...)对我来说并不重要,我可以进行适当的转换

【问题讨论】:

  • 这里的最终目标是什么?您是否尝试通过网络传递编码的 jpeg?
  • 你可以简单地使用ImageIOBufferedImage写入一个ByteArrayOutputStream,最后从这个流中获取字节数组...
  • 1) 我需要在写入之前加密图像,因为如果我编码加密字节(因为 jpeg 是有损格式)我将无法解密回来,所以我需要先执行 jpeg 编码的加密。 __2) 是否可以避免使用 ImageIO 写入文件?我没有,如果可以的话,我如何从 OutputStream 中检索数组?

标签: java jpeg encode


【解决方案1】:

正如 cmets 中已经提到的:您可以使用 ImageIO 类,并使用它来写入 ByteArrayOutputStream。代码真的可以这么简单:

private static byte[] getJpgData(BufferedImage image)
{
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ImageIO.write(image, "jpg", baos);
    return baos.toByteArray();
}

这将将图像写入光盘左右。它只会将图像写入内存块,然后您可以进一步处理或操作。

【讨论】:

    【解决方案2】:

    如果您只需要字节流,则使用 Java 的内置方法。

    http://docs.oracle.com/javase/7/docs/api/javax/imageio/ImageIO.html#write(java.awt.image.RenderedImage,%20java.lang.String,%20java.io.OutputStream)

    ImageIO.write(myImage, "format", myOutputStream); 
    

    【讨论】:

    • 不是把图片写成文件吗?我需要不执行输出写入。如果它可以避免使用该方法写入,我如何从 OutputStream 中检索数组?
    • 它写入您传入的输出流。只是不要使用文件输出流。使用 ByteArrayOutputStream,您将拥有一个表示图像的字节流,并且不会写入任何文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    • 2014-12-16
    • 1970-01-01
    • 2017-10-22
    • 2018-01-18
    • 1970-01-01
    • 2014-05-20
    相关资源
    最近更新 更多