java - 将 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')
解决方案
简单的方法:
public static byte[] toJpegBytes(BufferedImage image) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "jpeg", baos);
return baos.toByteArray();
}
如果您想更好地控制转换(压缩级别等),请参阅在 Java 中使用 ImageIO 设置 jpg 压缩级别。
推荐阅读
- android - 如何在 Kotlin 中使用 ViewModel 测试协程?
- excel - Excel宏或函数:如果单元格不为空,则使用循环值(来自另一张表)填充单元格范围(A列)
- javascript - 异步函数和 promise 需要很长时间才能解决
- javascript - 如何通过 normalizrjs 规范化 javascript 中的数据?
- grafana - 如果使用 iframe,如何更改 Grafana 的时间范围?
- typescript - 如何在 Typescript 中根据变量设置动态类型
- image-processing - 使用 libvips 重新缩放图像
- javascript - CS50 Finance 中的用户名检查问题
- angular - Angular 6 通过服务在 2 个组件实例之间进行通信
- java - 截图应用到剪贴板