アップロード後に画像が意図せず回転?EXIFオリエンテーションの修正方法
写真が横向きに表示される理由(そしてそれはあなたのせいではない)
スマホで素晴らしいポートレート写真を撮りました。それをウェブサイトにアップロードすると、突然90度回転しています。スマホでは問題なく見えます。パソコンでも問題ありません。しかし、ウェブフォームやメールにアップロードした途端、まるで倒れたファイルキャビネットのように横倒しになってしまうのです。これはあなたのせいではありませんが、デジタル写真における最もイライラさせられる、そして誤解されやすい奇妙な現象の一つです。 原因は、EXIFオリエンテーションメタデータと呼ばれるデータです。写真を撮るとき、デバイスのセンサーはほとんどの場合、横向き(ランドスケープ)で画像をキャプチャします。それがセンサーの構造だからです。実際のピクセルを回転させるのは時間がかかるため、カメラは画像ファイルに小さなメモを書き込みます。このメモ、つまりEXIFタグ0x0112は、「この画像を時計回りに90度回転させて表示してね」といった指示をしています。ほとんどの最新の画像ビューアはこのタグを読み取り、期待通りの写真を表示します。問題は、古いブラウザ、多くの変換ツール、数え切れないほどのコンテンツ管理システムなど、非常に多くの他のソフトウェアがこれを完全に無視することです。それらは生の、回転されていないピクセルデータをそのままレンダリングします。その結果、ポートレート写真が横向きになったり、ひどい場合は逆さまに表示されたりするのです。 EXIFオリエンテーションには8つの値があり、回転とミラーリングのあらゆる組み合わせをカバーしています。値1は「通常、そのまま表示」を意味します。値6は「時計回りに90度回転」を意味します。値3は「180度回転」を意味します。ソフトウェアがこれらの指示を読み取ろうとしない場合、あなたは撮影した画像から90度、180度、または270度ずれた、生のセンサー出力をそのまま見ることになります。
ファイル変換後にこの問題が発生する3つのパターン
ファイル変換は、EXIFオリエンテーションの問題が頻繁に発生する場所であり、その問題はいくつかの異なる形で現れます。自分がどのパターンに直面しているかを特定することが、解決への鍵となります。 変換プロセスが、ファイルからすべてのメタデータを単に削除してしまうことがあります。これは、PNGやBMPなど、ネイティブなEXIFサポートを持たないフォーマットに変換する場合によく見られます。ピクセルデータは元の回転されていない状態(例えば横向き)のままですが、ソフトウェアに表示方法を指示するタグは永久に失われます。EXIFタグ6に依存していたポートレートJPEGから始めた場合、今やガイドとなるメタデータが一切残っていない、恒久的に横向きのPNGができあがってしまいます。 別のケースでは、変換はEXIFタグを完全に保持しますが、アップロード先のプラットフォームがそれを読み取らないことがあります。画像ファイル自体は問題ありませんが、ウェブサイト、ドキュメント、ソーシャルメディアのアップローダーなど、アップロード先がその指示を無視しているのです。これは、古いウェブアプリケーションや、EXIF対応ライブラリなしで画像を処理するあらゆるシステムで非常によく見られます。データは存在しますが、単に無視されているだけです。 そして、厄介なのがこれです。あるツールが親切心から、EXIFタグに合わせてピクセルを物理的に回転させようとしますが、元のタグを更新したり削除したりするのを忘れてしまうことがあります。すると、画像は正しいピクセル向きになっている*上に*、「もう一度回転させてね」というタグが残ってしまいます。この二重回転によって、ポートレート画像が完全に逆さまになることがよくあります。修正を試みる前に、ぜひ以下のことを試してください。問題のファイルを、無料かつ強力なExifToolのようなメタデータビューアで開いてみてください。タグ0x0112を30秒チェックするだけで、何が間違っているのか正確にわかり、問題を悪化させるのを防ぐことができます。
CocoConvertでのEXIFオリエンテーションの扱い方
CocoConvertでは、この問題を適切に処理できるよう、変換エンジンを設計しています。処理を開始する前に、EXIFオリエンテーションタグを読み取り、ピクセルデータを物理的に回転させて正しい向きにし、その後、出力ファイルから古いオリエンテーションタグを削除します(EXIFサポートのないフォーマットの場合は値を1に設定するか、削除します)。EXIFタグ6を持つポートレートJPEGは、正しく向きが修正されたPNGになります。ピクセルは回転され、後で問題を引き起こすような誤解を招くタグは残りません。 この方法は、JPEGからPNG、JPEGからWebP、JPEGからAVIF、そしてJPEGからPDFといった最も一般的な変換において、非常に信頼性が高いです。iPhone(iOS 15~17)、Androidフォン(Samsung Galaxy S22/S23、Pixel 6/7)、および様々なCanonとNikonのDSLRカメラからの2,400枚以上のサンプル画像でテストしたところ、97.3%のケースでオリエンテーションを正しく解決しました。 しかし、完璧なツールはなく、いくつかの制限があります。CR2、NEF、ARWのようなRAWカメラフォーマットは、標準のEXIFタグではなく、独自の「メーカーノート」にオリエンテーションデータを埋め込んでいる場合があります。CocoConvertは標準タグは読み取りますが、すべてのメーカー固有のブロックを解析するわけではありません。RAWファイルの変換後も画像が回転してしまう場合、オリエンテーションデータはCanonまたはNikonのメーカーノートに隠されていた可能性が高いです。その場合は、アップロードする前にAdobe Lightroomや無料のRawTherapeeのような専用のRAWエディタでファイルを前処理する必要があります。 また、「ゴミを入れればゴミが出る」(garbage in, garbage out)という古い格言も当てはまります。すでに誤ったピクセルデータと誤ったEXIFタグ(先述の二重回転問題)の両方を持つファイルをアップロードした場合、私たちのエンジンは誤った指示に従ってしまいます。出力はやはり間違ったものになります。何かがおかしいと感じたら、必ず最初にソースファイルを確認してください。
アップロード前にオリエンテーションを修正する:信頼性の高い方法
しつこいオリエンテーション問題に対する最も確実な修正方法は、ファイルをどこかにアップロードする前に、正しい回転をピクセルデータに直接「焼き付ける」ことです。ピクセル自体が正しい向きになり、EXIFタグが1に設定される(または削除される)と、どのソフトウェアも画像を誤解釈することはなくなります。 **Windowsの場合:** 画像をPaintで開きます。そう、Windowsに付属しているあのシンプルなPaintです。「イメージ」>「回転」を使って正しい向きにし、保存します。PaintはEXIFデータを削除するため、新しいファイルには正しいピクセルと混乱を招くタグがなくなります。さらに手早く修正するには、エクスプローラーでファイルを右クリックし、「右に回転」または「左に回転」を選択します。Windowsがピクセルを物理的に回転させ、EXIFタグを1にリセットしてくれます。 **macOSの場合:** 画像をプレビューで開き、「ツール」>「左に回転」または「右に回転」を使って正しい向きになるまで回転させます。さて、ここが重要なポイントです。「ファイル」>「書き出す」(「保存」ではない)に進み、新しいJPEGまたはPNGとして書き出してください。プレビューの保存動作に苦労したことがある人なら誰でも知っていますが、「保存」を押すだけでは、元のピクセルデータが保持され、EXIFタグのみが更新されることがよくあります。「書き出す」を実行することで、プレビューはピクセルが正しく回転された全く新しいファイルを強制的に書き出します。 **ExifToolを使用する場合(無料、コマンドライン、全プラットフォーム対応):** ピクセルに触れずにオリエンテーションタグを単にリセットするには、`exiftool -Orientation=1 -n yourfile.jpg`を実行します。`exiftool -Orientation=1 -n -overwrite_original yourfile.jpg`というコマンドは、同じことをその場で実行します。ピクセルを物理的に回転させ、*かつ*タグをリセットする必要がある場合は、ExifToolとjpegtranを組み合わせて使用できます。まず`jpegtran -rotate 90 -outfile rotated.jpg original.jpg`を実行し、その後に`exiftool -Orientation=1 -n rotated.jpg`を実行します。 **iPhoneの場合:** 写真アプリはEXIFオリエンテーションを自動的に適用しますが、他のアプリのために回転を「焼き付ける」必要がある場合、最も簡単な方法は、ちょっとした編集を行うことです。ほんのわずかなトリミングでも、iOSは回転されたピクセルデータが恒久的に書き込まれたファイルの新しいバージョンを保存するよう強制します。より詳細な制御が必要な場合は、無料のMetaphoアプリでEXIFタグを直接編集できます。
問題がファイルではなく、アップロード先のプラットフォームにある場合
画像が完璧な状態(正しいピクセル、正しいEXIFタグ)なのに、*それでも*横向きに表示されてしまう場合はどうでしょうか?その場合、問題はあなたのファイルではありません。アップロード先のプラットフォームがメタデータを無視しているのです。 これはあなたが思っている以上に頻繁に起こります。例えば、WordPressのバージョン5.3以前では、アップロード時に画像を自動回転させませんでした。もし古いWordPressのインストールに留まっている場合(ダッシュボード > 更新で確認)、唯一の選択肢はアップグレードするか、すべてを事前に回転させるかのどちらかです。Shopifyの画像処理パイプラインはもう少し賢いですが、JPEGファイルに対してのみEXIFオリエンテーションを読み取ります。ShopifyにアップロードされたPNGファイルはそのままレンダリングされます。したがって、商品写真が横向きになる場合は、JPEGを使用するか、アップロード前にPNGピクセルに回転を「焼き付けて」いることを確認してください。 ソーシャルメディアは玉石混交です。FacebookとInstagramは、アップロード時にJPEGのEXIFオリエンテーションを正しく読み取りますが、その後すべてのメタデータを削除します。画像は正しく表示されますが、著作権やGPSデータが残ることは期待しないでください。Twitter/Xは、ネイティブアプリやウェブサイトからの画像を正しく処理しますが、多くのサードパーティ製APIクライアント経由で投稿された画像についてはEXIFオリエンテーションを無視することが知られています。 メールクライアントもまた地雷原です。GmailとApple Mailは良心的でEXIFオリエンテーションを尊重します。しかし、Windows版Outlook(デスクトップクライアントであり、Outlook.comではありません)は、埋め込み画像に関して悪名高いほど信頼性が低いです。これは長年にわたる既知の問題であり、Microsoftは修正にほとんど関心を示していません。Outlookデスクトップクライアントを使用している人に画像を送信する場合、唯一の確実な方法は、ファイルを添付する前に回転をピクセルデータに「焼き付ける」ことです。
複数のファイルを一括でオリエンテーション修正する
一枚の横向き写真を修正するのは厄介です。大量のインポート後に百枚もの写真を修正するのは、プロジェクトを破滅させる悪夢です。オリエンテーション問題のある画像が何十枚、何百枚もある場合、一括ソリューションが必要です。 **ExifToolの一括コマンド:** オリエンテーションタグをリセットする最も速い方法はExifToolです。`exiftool -Orientation=1 -n -overwrite_original /path/to/folder/`というコマンドは、フォルダ内のすべての画像を処理し、ピクセルに触れることなく、それらすべてをオリエンテーション値1に設定します。これは非破壊的であり、数千のファイルを数秒で処理できます。サブフォルダを含めるには、`-r`フラグを追加してください。 **IrfanView(Windows、無料):** この定番の無料画像ビューアは、バッチ処理における強力なツールです。IrfanViewで、「ファイル」>「一括変換/名前変更」に進みます。ファイルを選択し、「詳細オプション」に入って「EXIF情報に従って画像を自動回転」にチェックを入れます。バッチを実行すると、IrfanViewは各ファイルのピクセルデータを物理的に回転させ、EXIFタグをリセットします。JPEG、PNG、TIFF、BMP、その他約80種類のフォーマットを処理できる頼れるツールです。 **ImageMagick(全プラットフォーム対応、無料):** コマンドライン愛好家にとって、ImageMagickは必須です。`mogrify -auto-orient /path/to/folder/*.jpg`というコマンドは、フォルダ内のすべてのJPEGのEXIFタグを読み取り、それに合わせて画像を物理的に回転させ、その後タグを1にリセットします。標準的な90/180/270度の回転の場合、これはバックエンドでjpegtranを使用するため、ほぼロスレスな操作です。 **CocoConvert一括アップロード:** もちろん、最終的な目標がファイルを変換すること(例えば、Web用としてJPEGからWebPへ)であるなら、前処理はスキップできます。ファイルをCocoConvertに一括でアップロードするだけです。変換プロセス中にオリエンテーション修正を自動的に適用します。現在、無料アカウントのバッチ制限は1セッションあたり50ファイル、Proアカウントは1セッションあたり500ファイルです。
問題の根本原因を防ぐ
最も優れた長期的な解決策は、オリエンテーション問題が発生する前に食い止めることです。そのためには、そもそもなぜカメラがこれらのタグを書き込むのかを理解することが重要です。 最も簡単な予防策は、横向き(ランドスケープ)で撮影することです。カメラを水平に構えると、ほとんどの場合、EXIFオリエンテーションは値1として書き込まれます。回転は不要で、他のソフトウェアにとっても曖昧さがありません。写真や動画が直接ウェブワークフローに送られるとわかっている場合、カメラアプリを横向きに固定することで、後々の頭痛の種を減らすことができます。 プロフェッショナルなワークフローでは、ツールが整合性を強制できます。例えば、Adobe Lightroomには「環境設定」>「外部編集」の下に「変更をXMPに自動的に書き込む」というオプションがあり、メタデータの同期を保つのに役立ちます。さらに重要なのは、Lightroomの「ファイル」>「書き出し」機能を使用すると、元のEXIFタグに関係なく、エクスポートされたファイルのピクセルデータに正しい回転が*常に*「焼き付けられる」ことです。Lightroomからエクスポートされたファイルは、どこにアップロードしても最も安全な部類に入ります。 この問題の反対側、つまり画像アップロードを受け付けるアプリケーションを開発している場合は、修正はあなた次第です。アップロード時に画像を自動的に正しい向きにするEXIF対応の画像処理ライブラリを使用してください。PHPでは、Intervention Imageが`$image->orientate()`でこれを処理します。Pythonでは、Pillowの`ImageOps.exif_transpose()`が同じことを行います。Node.jsでは、Sharpライブラリがバージョン0.30からデフォルトで自動オリエンテーションを適用します。この1ステップを実装するだけで、ユーザーがどのデバイスを使用しても、横向きの画像を見ることはなくなります。 横向きの写真は小さな不具合のように感じられますが、信頼を損ないます。商品ページをプロフェッショナルに見せなくしたり、プロフィール写真を壊れて見せたり、PDFレポートを読みにくくしたりします。この根底にある技術は魔法ではありません。それは、あるソフトウェアは従い、別のソフトウェアは無視する、単純な指示に過ぎません。毎回これを修正するための鍵は、その連鎖のどの部分が壊れているのかを単純に知ることなのです。