【问题标题】:Is there a grayscale JPG format?有灰度 JPG 格式吗?
【发布时间】:2018-12-03 04:01:51
【问题描述】:

将彩色 JPG 图像转换为灰度图像并将其保存回 JPG 时,通常可以看到文件大小至少减少 20%,这看起来很自然。

问题:

  1. JPG 规范中是否有特定的“灰度”格式?我在JPEG File Interchange Format 中看到了this,但不确定它是否是现在使用的标准

  2. 或者是“灰度 JPG”通常只是一个彩色 RGB JPG,其中R = G = B,因此文件大小的减少是由于压缩了 3 倍重复数字?

在我看来是 2。因为在各种语言中,JPG 导出函数没有灰度选项,例如 Javascript 中的 toDataURL

var fullQuality = canvas.toDataURL('image/jpeg', 1.0);
var mediumQuality = canvas.toDataURL('image/jpeg', 0.5);
var lowQuality = canvas.toDataURL('image/jpeg', 0.1);

【问题讨论】:

    标签: javascript image jpeg


    【解决方案1】:

    JPG 规范中是否有特定的“灰度”格式?

    是的,它得到了很好的支持。现在不常用了,但几乎所有东西都可以阅读。

    或者是“灰度 JPG”,通常只是一个彩色 RGB JPG,其中 R 值==G 值==B 值,因此文件大小的减少是由于 3 倍重复数字的压缩导致的?

    并非所有 API 都会公开所有可用功能。灰度处理特定于格式,不适用于所有其他格式。特别是 Canvas API 试图标准化所有可能的导出格式。因此,仅支持部分功能。

    当您通过 Canvas API 保存图像时,您可能保存的是带有色度分量的 JPEG,它们实际上是空的并且压缩得很好。 (话虽如此,具体的行为是未定义的,浏览器可以选择通过检测灰度来优化和保存灰度 JPEG。)

    【讨论】:

      【解决方案2】:

      彩色 JPEG 有 3 个分量:Y Cb Cr

      灰度 JPEG 有 1 个分量:Y

      您只需更新标题以指示 1 个分量并删除 Cb 和 Cr 扫描,即可将彩色 JPEG 转换为灰度。

      【讨论】:

      • 哦,我以为彩色 JPEG 有 3 个组件:R、G、B,你的意思是它内部存储有 Y Cb Cr (en.wikipedia.org/wiki/YCbCr)?
      • 所以移除 Cb Cr 以仅保留灰度在理论上可以将文件大小减少约 66%,对吗?我尝试使用 Photoshop 等,但通常,当使用灰度功能时,JPG 最多减少 20%。可能 Cb Cr 数据比 Y 小得多(即 Cb Cr 数据压缩程度很大?)
      • 最后一个问题@user3344003:有没有工具可以显示JPG文件中Y数据、Cb数据、Cr数据占用了多少大小?
      • JPEG 标准没有颜色的定义。它指定了通用术语“组件”。按照惯例,YCbCr 成为 JPEG 中使用的组件。理论上,消除Cb和Cr将减少2/3。但是,通常通过对 Cb 和 Cr 分量进行二次采样来减小彩色图像的大小。例如,对于每 1 个 Cb 和 Cr 值,您的图像可能有 4 个 Y 值。我不知道有什么工具可以测量尺寸,但写起来很容易。扫描 JPEG 流中的 SOS 标记并测量大小。 Adobe 指定了 4 种分量 JPEG (CMYK),但很少有人使用它们。
      • @Basj,由于大脑感知颜色信息与边缘对比度的方式,颜色通道中的压缩比单色通道高得多。 jpeg 格式从这一事实中受益匪浅,可以生成小文件。
      猜你喜欢
      • 2015-02-13
      • 1970-01-01
      • 1970-01-01
      • 2014-04-25
      • 2013-08-07
      • 2013-01-06
      • 1970-01-01
      • 2017-06-07
      相关资源
      最近更新 更多