使用CGImage的JPEG压缩质量

Cut*_*low 16 macos jpeg image cgimage ios

我使用CGImage的API( CGImageDestination, CGBitmapContext,,CGImage在Mac OS X等)以及iOS的压缩图像为JPEG.使用该kCGImageDestinationLossyCompressionQuality属性,您可以控制压缩质量:0.0最大压缩和1.0最高质量(如果可能,根据Apple,无损).

我发现当你去的时候,磁盘大小和图像质量都有很大的0.99提升1.0..例如,我有一个2048x1368的图像,当质量设置为压缩到430 KB 0.99但是当质量达到2.3 MB时设置为1.0.视觉质量也有很大的提升,并且0.99这个特定图像的设置是不可接受的.尝试设置质量之间的任何东西0.991.0作为规模保持在430 KB,直到不起作用0.995的地方跳起来2.3 MB.另外,是不是真的有素质相差无几0.90,以0.99在视觉质量有较大提升其范围的文件大小从353〜KB至430 KB,但不是.

有谁知道是否有任何方法可以提高JPEG质量?我真的需要的东西比0.99给予我的东西更好但却少于1.0提供给我的东西.也许我可以使用其他一些API?

我可能会尝试直接使用libjpeg,但我希望它不会出现这种情况.

更新

经过一些调查后发现,对于所有kCGImageDestinationLossyCompressionQuality设置,1.0Apple使用4:2:0 色度子采样(或色度抽取).这意味着对于YCrCb图像,它们仅针对每4个亮度(Y)像素采样一个色度像素(CrCb).换句话说,他们只使用原始图像中1/4的色度数据.对于1.0Apple 的质量使用4:4:4色度子采样,这对于每个亮度像素都不是色度子采样或一个色度像素.这就是文件大小爆炸的原因,因为图像包含4x颜色数据与质量<= 0.99.

那么,有没有人知道是否有办法使用CGImage(或任何其他API)关闭色度子采样的质量低于1.0

Cut*_*low 5

最终更新

\n\n

经过广泛的研究并遵循上面评论中的建议,似乎没有办法使用任何 Apple\xe2\x80\x99s 内置 API 来禁用色度子采样/抽取,除非设置kCGImageDestinationLossyCompressionQuality1.0大的图像。

\n\n

如果您在保存为 JPEG 时需要能够自己控制色度子采样/抽取,那么您\xe2\x80\x99 将需要使用第三方库,例如 libjpeg。

\n