Laravelで使用できるライブラリには、非常に簡単に画像を編集できるライブラリが存在します。
非常に多機能で、バックエンドにImagemagickやGDを使用することができ、Laravelとも連携することが可能です。
intervention/imageをインストールcomposerでインストールします。composer require…
さて、Laravelの自作中のプログラムで、下記のような処理を入れました。
$imageRaw = Storage::get(写真のパス);
$image = \Intervention\Image\Facades\Image::make($imageRaw); // 写真を指定パスから読み込んでInterventionImageオブジェクトを作成
$image->orientate(); // 画像のEXIF情報から正しい画像の向きに修正
$image->save(写真保存パス); // 指定されたパスに画像を保存
画像をそのままアップロードしただけではEXIF内の情報は考慮されず、元データのままの向きで画像が処理されてしまいますが、2行目のorientate()メソッドを使用することで、取得した画像のEXIF情報を取得して、画像を正しい方向に自動で修正してくれます。
ところが、iOSデバイスで撮影した画像については、このorientate()メソッドが働かない問題に当たりました。
こちらが、iPod touchで撮影した元の画像です。
こちらの画像をなにも処理せずにブラウザで表示すると横を向いたままになってしまいます。
さて、アップロード後、orientate()メソッドを実行すると…
補正処理を入れているにもかかわらずこんなふうに横を向いたままになってしまいます。
色々調べたところ、orientate()を実行した際、本来取得されるはずのEXIF情報が、写真によってはうまく取得されないという報告がありました。
I'm trying to read my exif data. If I run $image->exif(), it…
こちらのIssueの内容によると、下記のようにして手動でEXIF情報をセットしなおすと解決するとのこと。
$imageRaw = Storage::get(写真のパス);
$image = \Intervention\Image\Facades\Image::make($imageRaw)->setFileInfoFromPath(Storage::path(写真のパス)); // EXIF情報を再セット
$image->orientate();
$image = $image->save(写真保存パス);
早速試してみたところ…
ちゃんと縦を向きました…!!!
iOSの写真の回転処理でお悩みの方は試してみてください。