JpegからAVIFへ画像変換のためにvipsを調査
前の記事でAVIFがWebPの半分くらいになると分かったので、もっと簡単にJpegから変換できないかと調べているときの覚書。
参考: JpegからAVIFへ変換するためのコマンドラインツールSquoosh, sharp, cavif
環境: CentOS Stream 8(仮想マシン), ImageMagick 6.9.12-67
Node.js製「sharp」はlibvipsを内部で使っているというのでvipsについて調べる。
パッケージ管理にあるというので検索してみる。
# dnf search vips
ない。。。
remiリポジトリをインストールしてみる。
参考: Remi's RPM repository
# dnf install http://rpms.remirepo.net/enterprise/remi-release-8.rpm
検索
# dnf search vips
あった。
vips-devel.x86_64 : Development files for vipsvips-heif.x86_64 : Heif support for vipsvips-magick-gm.x86_64 : Magick support for vips using GraphicsMagickvips-magick-im6.x86_64 : Magick support for vips using ImageMagick6vips-magick-im7.x86_64 : Magick support for vips using ImageMagick7vips-openslide.x86_64 : OpenSlide support for vipsvips-poppler.x86_64 : Poppler support for vipsvips-tools.x86_64 : Command-line tools for vips
ん?ImageMagick6で使えるようになるのかな?と思いインストールしてみる。
(怖かったのでスナップショットを取ってから)
# dnf install vips-magick-im6
ImageMagickの対応フォーマットの確認
# convert -list format | grep AV
ない。
よく分からない。
vipsをコマンドラインを使うツールをインストール。
# dnf install vips-tools
確認
# vips -h
# vips --version
vips-8.13.3-Tue Nov 1 09:09:54 UTC 2022
# vips --vips-config
HEIC/AVIF load/save with libheif: yes (dynamic module: yes)
AVIFに対応しているみたい。
試す
$ vips copy key-visual.jpg test.jpg
$ vips copy key-visual.jpg test.webp
$ vips copy key-visual.jpg test.avif
VipsForeignSave: "test.avif" is not a known file format
失敗する。
公式サイトのIssueを見ながら調べる。
Cannot get VIPS to export AVIF · Issue #2324 · libvips/libvips
# vips -l | grep _target
VipsForeignSaveCsvTarget (csvsave_target), save image to csv (.csv), priority=0, monoVipsForeignSaveMatrixTarget (matrixsave_target), save image to matrix (.mat), priority=0, monoVipsForeignSaveVipsTarget (vipssave_target), save image to target in vips format (.v, .vips), priority=0, anyVipsForeignSavePpmTarget (ppmsave_target), save to ppm (.ppm), priority=0, rgbVipsForeignSaveRadTarget (radsave_target), save image to Radiance target (.hdr), priority=0, rgbVipsForeignSaveCgifTarget (gifsave_target), save as gif (.gif), priority=0, rgba-onlyVipsForeignSaveDzTarget (dzsave_target), save image to deepzoom target (.dz, .szi), priority=0, anyVipsForeignSavePngTarget (pngsave_target), save image to target as PNG (.png), priority=0, rgbaVipsForeignSaveJpegTarget (jpegsave_target), save image to jpeg target (.jpg, .jpeg, .jpe), priority=0, rgb-cmykVipsForeignSaveWebpTarget (webpsave_target), save image to webp target (.webp), priority=0, rgba-onlyVipsForeignSaveTiffTarget (tiffsave_target), save image to tiff target (.tif, .tiff), priority=0, any
libheifがないから?
# pkg-config libheif --print-variables
Package libheif was not found in the pkg-config search path.Perhaps you should add the directory containing `libheif.pc'to the PKG_CONFIG_PATH environment variablePackage 'libheif', required by 'virtual:world', not found
vips-heifなるものをインストールしてみる。
# dnf install vips-heif
Error:Problem: cannot install the best candidate for the job- nothing provides libheif.so.1()(64bit) needed by vips-heif-8.13.3-1.el8.remi.x86_64(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)
libheifのビルドが必要らしいけど、パッケージ管理できないのは使いにくいので諦めた。
スナップショットでインストール前に戻した。
remiリポジトリも削除しておく。
# dnf list installed | grep remi
# dnf remove remi-release