sharpでHEICをJPEGに変換する
概要
準備
今回は、dockerのnodeの公式のイメージを利用します。
$ docker run --rm -it -v $(pwd):/home/node/test-sharp -w /home/node/test-sharp node bash
「-v」でホスト側のカレントディレクトリをコンテナの/home/node/test-sharpにマウントしています。
「-w」でコンテナの作業ディレクトリを/home/node/test-sharpに指定しています。
- nodejsのバージョンの確認
# node --version v16.9.0
- sharpのインストール
# npm install sharp # npm list test-sharp@ /home/node/test-sharp `-- sharp@0.29.1
0.29.1がインストールされています。
- 変換するスクリプトを作成
# cat <<EOF > index.js const sharp = require('sharp') sharp('sample.heic').jpeg().toFile('sample.jpg') EOF
「sample.heic」はHEIC形式の画像ファイルです。 これをsharpを利用して、JPEG形式に変換して「sample.jpg」として保存します。
- スクリプトを実行
# node index.js node:internal/process/promises:246 triggerUncaughtException(err, true /* fromPromise */); ^ [Error: sample.heic: bad seek to 2727395 heif: Unsupported feature: Unsupported codec (4.3000) ...
sharpが利用しているlibvipsがHEICに対応していないため、エラーになります。
- sharpが対応しているlibvipsのバージョンを確認
# cat node_modules/sharp/package.json ... "config": { "libvips": "8.11.3", "runtime": "napi", "target": 5 }, ...
- sharpをアンインストール
このままではHEICを変換できないので、一旦、sharpをアンインストールします。
# npm uninstall sharp
変換方法
libvipsをHEICに対応させるため、「libde265」、「x265」、「libheif」、「libvips」をそれぞれソースからコンパイルしてインストールします。
- 必要となるライブラリのインストール
# apt update # apt install -y cmake gtk-doc-tools gobject-introspection
- libde265のコンパイル・インストール
# cd /tmp # git clone https://github.com/strukturag/libde265.git # cd libde265/ # ./autogen.sh # ./configure # make # make install
- x265のコンパイル・インストール
# cd /tmp # git clone https://github.com/videolan/x265.git # cd x265/build # cmake ../source # make # make install
- libheifのコンパイル・インストール
# cd /tmp # git clone https://github.com/strukturag/libheif.git # cd libheif/ # ./autogen.sh # ./configure # make # make install
- libvipsのコンパイル・インストール
# cd /tmp # curl -LO https://github.com/libvips/libvips/releases/download/v8.11.3/vips-8.11.3.tar.gz # tar -zxf vips-8.11.3.tar.gz # cd vips-8.11.3 # ./autogen.sh # ./configure # make # make install
インストールされたlibvipsのバージョンを確認しておきます。
# pkg-config --modversion vips-cpp 8.11.3
共有ライブラリのキャッシュを更新します。
# ldconfig
- sharpをインストール
# cd /home/node/test-sharp # npm install sharp
- HEICを変換する
# node index.js
- 確認
# file sample.heic sample.heic: ISO Media, HEIF Image HEVC Main or Main Still Picture Profile # file sample.jpg sample.jpg: JPEG image data, baseline, precision 8, 3024x4032, components 3