gpt4 book ai didi

go - 将 mozjpeg 与其 cjpeg 一起使用比将其用作库具有更高的质量

转载 作者:数据小太阳 更新时间:2023-10-29 03:03:30 25 4
gpt4 key购买 nike

我一直在尝试在我的 Go 应用程序中使用 mozjpeg 进行 JPEG 压缩,因为当通过它提供的 cjpeg 命令行实用程序使用时,它的质量似乎非常好。

但是,使用我的应用程序压缩的图片质量较差 - 具有相同质量水平的 JPEG 人工制品要多得多。

我正在为来自 https://github.com/subuk/go-mozjpeg/blob/master/jpeg/compress.go 的 libjpeg-turbo/mozjpeg 使用 go 绑定(bind)

我自己的代码好像也不算太复杂:

    libjpegOptions := jpeg.EncoderOptions{
Quality: 92,
OptimizeCoding: true,
ProgressiveMode: true,
}

err = jpeg.Encode(buf, m, &libjpegOptions)
if err != nil {
return nil, err
}

这两个应用程序似乎都链接到相同版本的 mozjpeg 库,与 Homebrew 一起安装:

$ otool -L /opt/mozjpeg/bin/cjpeg
/opt/mozjpeg/bin/cjpeg:
/opt/mozjpeg/lib/libjpeg.62.dylib (compatibility version 65.0.0, current version 65.0.0)
/usr/local/opt/libpng/lib/libpng16.16.dylib (compatibility version 51.0.0, current version 51.0.0)
/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.11)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.0.0)

$ otool -L /Users/fabio/Code/go/bin/imageproxy
/Users/fabio/Code/go/bin/imageproxy:
/opt/mozjpeg/lib/libjpeg.62.dylib (compatibility version 65.0.0, current version 65.0.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1451.0.0)
/System/Library/Frameworks/Security.framework/Versions/A/Security (compatibility version 1.0.0, current version 58286.41.2)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.0.0)

接下来我可以尝试什么来确保我的应用程序使用与 cjpeg 相同的设置?

最佳答案

必须回答我自己的问题,因为我通过查看 mozjpeg 的提交历史找到了问题的解决方案。 cjpeg 在其参数解析代码中对 JPEG 质量等级高于 80 的色度子采样有一个隐式默认值,并且某些颜色的实心区域的边界在色度子采样的库默认值下看起来非常糟糕。

/*
Disable chroma subsampling for good quality ratings, that's what cjpeg command does as well.
That seems to cause some issues with red color.
*/
if opt.Quality >= 80 {
compInfo := (*[3]C.jpeg_component_info)(unsafe.Pointer(cinfo.comp_info))
compInfo[Y].h_samp_factor, compInfo[Y].v_samp_factor = 1, 1
compInfo[Cb].h_samp_factor, compInfo[Cb].v_samp_factor = 1, 1
compInfo[Cr].h_samp_factor, compInfo[Cr].v_samp_factor = 1, 1
}

关于go - 将 mozjpeg 与其 cjpeg 一起使用比将其用作库具有更高的质量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48991531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com