🖼️
コマンドラインでの画像の可逆圧縮方法まとめ
コマンドラインで画像を可逆圧縮する方法について備忘録としてまとめておきます。
非可逆圧縮と可逆圧縮の両方に対応している画像ファイルフォーマットが対象です。
リファレンス実装など
AVIF
AVIFに可逆圧縮するにはlibavifのavifenc
が利用できます。
圧縮時に-l
(長いオプション: --lossless
)を指定すると可逆圧縮になります。
avifenc -l input.png output.avif
HEIC
HEIC(HEIF)に可逆圧縮するにはlibheifのheif-enc
が利用できます。
圧縮時に-L
(長いオプション: --lossless
)と-p chroma=444
と--matrix_coefficients=0
を指定すると可逆圧縮になります。
heif-enc -L -p chroma=444 --matrix_coefficients=0 input.png
JPEG 2000
JPEG 2000に可逆圧縮するにはOpenJPEGのopj_compress
が利用できます。
デフォルトで可逆圧縮なので追加のオプションは不要です。
opj_compress -i input.png -o output.jp2
JPEG XL
JPEG XLに可逆圧縮するにはlibjxlのcjxl
が利用できます。
圧縮時に-q 100
(長いオプション: --quality=100
)を指定すると可逆圧縮になります。
cjxl -q 100 input.png output.jxl
入力がJPEGかGIFの場合はデフォルトで可逆圧縮なのでこのオプションは不要です。
# JPEG
cjxl input.jpg output.jxl
# GIF
cjxl input.gif output.jxl
WebP
WebPに可逆圧縮するにはlibwebpのcwebp
が利用できます。
圧縮時に-lossless
を指定すると可逆圧縮になります。
cwebp -lossless input.png -o output.webp
ImageMagick
ImageMagickではmagick
(古いバージョンではconvert
)が利用できます。
基本的に-quality 100
を指定すると可逆圧縮になります。
画像ファイルフォーマットによっては他の値を指定したり、このオプションを指定しない場合でも可逆圧縮にできそうです。
magick -quality 100 input.png output.jxl
実装上はAVIFとHEICも同じ方法で可逆圧縮できそうですが、実装ミスなのか可逆圧縮できませんでした。
参考文献
- Image Formats - ImageMagick
- JP2 Encoding Options - ImageMagick
- WebP Encoding Options - ImageMagick
Discussion