禁用 Java ImageIO 色度二次采样

Posted

技术标签:

【中文标题】禁用 Java ImageIO 色度二次采样【英文标题】:Disable Java ImageIO Chroma Subsampling 【发布时间】:2012-12-18 10:54:37 【问题描述】:

我正在尝试使用 ImageIO 将 BufferedImage 保存为 JPEG。但是,即使使用 100 质量进行保存,由于色度子采样,我也会遭受质量损失。

我已通过恢复到较旧的 JAI 库并将水平和垂直二次采样显式设置为 1 成功解决了此问题。 然而,一个关键要求是我将图像保存为渐进式,JAI 似乎不支持。

有没有办法使用较新的 ImageWriter 禁用子采样?

提前致谢

如果可能,我想避免使用 ImageMagick

【问题讨论】:

经过广泛搜索图像写入/质量/压缩问题。 “使用 ImageMagick”似乎是一个常见的答案。理想情况下,我想知道这在 Java 中是否可行,然后再走 ImageMagick 路线。我不反对第三方库,只要它们是轻量级和可靠的。 感谢您的澄清。也许该信息应该是edited 进入问题。 【参考方案1】:

阅读JPEG Metadata Format Specification and Usage Notes 似乎表明可以通过使用自定义IIOMetadata 编写图像来实现。

在互联网上搜索会出现https://codereview.appspot.com/3082041/patch/204004/210007,它似乎正是以这种方式使用 ImageIO。

我没有尝试过,不知道它是否真的有效。

【讨论】:

非常感谢您。我已经设法通过使用 IIOMetadata 使其工作,与旧的 JAI 相比,性能令人震惊,但现在可以了。

以上是关于禁用 Java ImageIO 色度二次采样的主要内容,如果未能解决你的问题,请参考以下文章

如何确定 Media Foundation 中特定 MJPEG 子类型的色度子采样?

Opencv 在 cv::Mat 中存储 Yuyv (YCrCb)

变长df二次采样函数r

如何对二维多边形进行二次采样?

Word2Vec 二次采样——实现

对numpy数组中的每个第n个条目进行二次采样