背景
カメラを回転させて撮影した画像データには、EXIFで回転情報が含まれている場合がよくあります。EXIFに沿って表示をしてくれるソフトなら問題ないのですが、imgタグ経由の表示等でEXIFが読み込まれない場合、画像が意図していない方向で表示されます。
たとえば、いま僕が使っているOSX + Safariの環境だと、画像だけを表示した場合には回転情報が適用され、imgタグからの参照では回転が適用されません。
画像アップロードを考える場合には、EXIFを読み込んでサーバ側で画像を回転させ、EXIFを削除しておくのが一番トラブルが少なくなります。
実装
通常はImageMagick等を使うことが多かったのですが、別ソフトのインストールは何かと面倒です。それで調べてみたところ、sharpを使うと簡単に画像回転ができました。
https://github.com/lovell/sharp
rotate()を引数なしで実行することで、EXIFから読み込んだ回転情報が適用されます。
"use strict";
const sharp = require("sharp");
sharp(infile)
.rotate()
.toFile(outfile, (err, info) => {
});
npm install一発で画像が処理できるのは非常に快適です。さらにパフォーマンス的にも有利なようです。自分で確認はしてないですが。
Resizing an image is typically 4x-5x faster than using the quickest ImageMagick and GraphicsMagick settings.
おためしあれ。