画像をまとめてリサイズしたかったため、Node.jsの勉強を兼ねて、簡単なコードを書いてみました。
Node.jsを使って、フォルダ内の全JPEGファイルを、まとめて一定の横幅にリサイズします(アスペクト比は固定)。
Sharpモジュールを使用
Node.jsで画像を操作するモジュールは多数ありますが、高速だと評判のsharpを試してみました。
Sharpモジュールのインストール
npm install -g sharp
実行コード
1 | const fs = require('fs'); |
注意したのは以下の点です。
- sharpでの変換の際、デフォルトではExif情報が失われるようです。
削除すべきとよく言われる位置情報は含まれておらず、逆に撮影条件を残したかったため、.withMetadata()
で、Exif情報を残すようにしました。 - デジカメをポートレート(縦長)で撮影しても、Exifに回転情報が記録されるため、通常、表示ソフト側で90度回転し、画像を正しい角度で表示してくれます。
ただし、この場合、リサイズの横幅指定が、回転前の長辺になるため、回転後の横幅(短辺)が、他の画像と揃いません。
そこで、.rotate()
によって、Exif情報を参照して、必要があるとき(ポートレート時)に画像を回転させています。