アップロードすると横向きになる写真を直す:向きのタグと回転

作成 · 更新 · 運営者(個人)

スマートフォンではまっすぐ見えていた写真が、掲示板やほかのアプリに載せると横向きになってしまうことはありませんか。写真のピクセルはもともと横向きで、「こう回して表示して」という向きのタグだけが付いていることがよくあります。形式変換で一度保存すると、ミルキットがタグのとおりにピクセルを回しておくので、タグを読まない場所でもまっすぐ表示されます。自作の試験写真で確かめた内容をまとめました。

なぜ一部の場所でだけ横向きになるの?

スマートフォンのカメラは、ピクセルをいつも同じ向きで保存し、端末をどう持っていたかは撮影情報(EXIF)の中の向きのタグに別に書き込むことがあります。タグを読むアプリは写真を回して表示し、タグを読まない場所や、向きを反映せずに撮影情報を消してしまう場所では、保存されたピクセルのまま、つまり横向きで表示されます。

そのため、同じファイルでもある場所ではまっすぐ、別の場所では横向きになります。ファイルが壊れているのではなく、表示する側がタグを読むかどうかの違いです。

試験写真で確かめました

上に赤いTOPの帯、下に青いBOTTOMの帯と上向きの矢印がある800×1200の縦長の絵を作りました。この絵を左に寝かせて1200×800で保存し、別のプログラム(libvips)で向きのタグ6(右に90°回して表示)を付けています。タグを無視して読むとTOPの帯が左にある横向きの写真で、タグを読むとまっすぐな800×1200の写真です。

このファイルをミルキットの形式変換と同じ処理に通し、結果を開き直しました。JPGで保存し、撮影情報を「すべて削除(初期設定)」のままにすると、結果のピクセルそのものが800×1200で、向きのタグはありませんでした。タグを無視して開いても、TOPの帯は一番上にありました。

「元の画像からコピー」を選ぶと、日付などの撮影情報の一部は残りますが、向きのタグは1(回転なし)に変わり、ピクセルはやはり800×1200でまっすぐでした。PNGで保存しても同じ結果です。ミルキットは向きのタグを一度だけ適用し、結果にもう一度回す指示を残しません。そのため、二重に回って逆さまになることもありません。

ミルキットで直す手順

  1. 形式変換を開き、横向きになる写真を追加します。
  2. プレビューがまっすぐかを見ます。向きのタグがある写真なら、プレビューの時点でまっすぐになっていて、保存結果もその向きです。
  3. 保存形式(JPEGなど)を選んで保存します。このコピーを載せれば、タグを読まない場所でもまっすぐ表示されます。
  4. プレビューでも横向きなら、タグがない写真です。追加設定の回転で「右に90°」や「左に90°」を選ぶか、↻ 90°ボタンを押してまっすぐにしてから保存してください。

タグがない写真は自動で直せないの?

はい、直せません。タグがない写真には「もとは縦長だった」という情報がファイルのどこにもないため、ミルキットは写真の内容を見て向きを推測しません。試験でも、タグのない横向きの写真を回転なしで保存すると、1200×800の横向きのままでした。同じ写真に「右に90°」を適用すると、800×1200でまっすぐになりました。

形式変換の回転の設定は、一緒に追加した写真すべてに同じように適用されます。何枚かのうち一部だけが横向きなら、横向きの写真だけを追加して回転して保存し、残りは回転なしで保存しましょう。回転の向きは、プレビューで空や文字の行など上が分かりやすい部分を見て決めると迷いません。

保存したあとに確かめること

保存したコピーを、載せる先のプレビューでもう一度見てください。そこでまっすぐなら、ピクセルそのものが回っているので、ほかの場所に載せても同じ向きで表示されます。元の写真はそのまま残し、まっすぐにしたコピーには別の名前を付けておくと、次に探しやすくなります。

特に、ファイル名しか表示されない申込フォームや、プリント機のように、載せてみるまで結果が見えない場所で役立ちます。ピクセル自体がまっすぐなコピーなら、相手がタグを読むかどうかを気にする必要がありません。

関連するツールを開く

MiruKitで実際に確認した結果

ファイル・設定保存されたピクセル向きのタグタグを無視すると
元のJPG1200×8006横向き
JPG · すべて削除800×1200なし正しい向き
JPG · 元の画像からコピー800×12001正しい向き
PNG800×1200なし正しい向き
タグなし横向き · 右に90°800×1200なし正しい向き
タグなし横向き · 回転なし1200×800なし横向き

立てた絵を左に寝かせて保存し、向きのタグ6を付けたJPGをlibvipsで作りました。公開中のprocessImageの結果をlibvipsで開き直し、ピクセルのサイズとタグを確認しました。タグを無視した見え方は自動回転なしで読んだピクセルです。

同じ写真をタグを読む場合と無視する場合に分けて並べました。
同じ写真をタグを読む場合と無視する場合に分けて並べました。
現在のツールで記事の設定を実際に適用した画面です。
現在のツールで記事の設定を実際に適用した画面です。

実測の元データを見る

知っておきたいこと

この試験は自作の画像1枚と向きのタグ6で行いました。ほかの向きの値(反転を含む)も同じ方法で処理するように作られていますが、今回試した値は6です。

撮影情報を削除すると、日時・カメラ・位置情報も一緒に消えます。日付を残したいなら「元の画像からコピー」、日付は残して位置だけ消したいなら「位置情報だけ削除」を選んでください。どちらでも向きのタグは1になります。

すでにまっすぐな写真に回転を加えると、そのぶんまた回ってしまいます。回転はプレビューが横向きのときだけ使いましょう。