私は自分の Go アプリケーションで JPEG 圧縮に mozjpeg を使用しようとしてきました。これは、mozjpeg が提供する cjpeg コマンドライン ユーティリティを使用すると、非常に優れた品質が得られるように思われるためです。
しかし、私のアプリケーションで圧縮された画像は品質が低く、同じ品質レベルの JPEG アーティファクトがはるかに多くなります。
https://github.com/subuk/go-mozjpeg/blob/master/jpeg/compress.goから libjpeg-turbo / mozjpeg の go バインディングを使用しています。
私自身のコードはそれほど複雑ではないようです:
libjpegOptions := jpeg.EncoderOptions{
Quality: 92,
OptimizeCoding: true,
ProgressiveMode: true,
}
err = jpeg.Encode(buf, m, &libjpegOptions)
if err != nil {
return nil, err
}
どちらのアプリケーションも、Homebrew でインストールされた同じバージョンの mozjpeg ライブラリにリンクしているようです。
$ 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 と同じ設定を使用していることを確認するには、次に何を試すことができますか?