首页 > 解决方案 > 将 BufferedImage 转换为 JPG 字节数组

问题描述

我正在开发一个图像处理平台,我的服务器目前使用 pythons PIL.Image 方法从客户端接受图像作为字节数组。我目前还使用 Java 作为前端,使用 FrameGrab 实用程序从视频中抓取图像帧,并将它们作为 BufferedImage 对象返回。我不明白我是如何从这个缓冲的图像对象转换为 jpg 字节数组的,并且可以使用一些帮助。

我找到了一个写出的例子

这是我的代码的基本部分。

            BufferedImage frame;

            for (int i = 1; i < 100; i++) { 
                try {
                    frame = AWTUtil.toBufferedImage(FrameGrab.getFrameAtSec(videoFile, i * .3));


                } catch (IOException ex) {
                    Logger.getLogger(FXMLDocumentController.class.getName()).log(Level.SEVERE, null, ex);
                } catch (JCodecException ex) {
                    Logger.getLogger(FXMLDocumentController.class.getName()).log(Level.SEVERE, null, ex);
                }
            }

我的 python 服务器后端目前只是尝试使用上述库保存文件,如下所示:

        img = Image.open(io.BytesIO(data))
        img.save('test.jpg')

标签: javapythonpython-imaging-library

解决方案


简单的方法:

public static byte[] toJpegBytes(BufferedImage image) throws IOException {
  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  ImageIO.write(image, "jpeg", baos);
  return baos.toByteArray();
}

如果您想更好地控制转换(压缩级别等),请参阅在 Java 中使用 ImageIO 设置 jpg 压缩级别


推荐阅读