iPhoneからAndroidへ写真を移したら
日付が変わった
(ファイルコピーとイメージキャプチャでの
転送)

iPhoneに入っていた写真を、らくらくスマートフォン(Android)へ移行してもらったところ、古い写真だけ撮影日ではなく「移行日」の日付になってしまいました。
移す前のiPhoneではちゃんと撮影日で並んでいたので、どうしてこうなったのでしょうか。

iPhone→Android 写真移行で日付が消える問題 2020/1/1 iPhone 2024/12/5 Android 撮影日が移行日に変わる 古い写真だけ日付が失われた

写真のデータ移行は単なるコピーに見えますが、写真アプリの仕組みやファイルのメタデータの扱われ方が意外と複雑です。

関連記事

1. Macの「イメージキャプチャ」で取り込んだ

最終的にうまくいったのが、「イメージキャプチャ」を使う方法です1

iPhoneをUSBでMacにつなぎ、標準アプリの「イメージキャプチャ」で写真を読み込みました。
この画像ファイルをPCにコピーし、それかららくらくスマートフォンにコピーしました。

Macの「イメージキャプチャ」アプリは、iPhone内部のフルデータを直接取り出す仕組みで、必要に応じてiCloudからオリジナルも取り寄せてくれます。
そのため、古い写真でもEXIFが復元された状態で保存され、ファイルの作成日と変更日も撮影日に揃いました。

実際に取り込んだファイルをAndroidへ移してみると、しっかり撮影日で認識されていました。

1.1. iPhone上では正しい日付なのに、Androidでは変わる理由

なぜiPhoneでは撮影日どおりに並ぶのに、Androidでは移行日に変わったのか。

失敗した移行方法 ✗ iCloud.com ブラウザから ダウンロード 作成日が ダウンロード日になる ✗ DCIMフォルダ パソコン経由で コピー 縮小版しか コピーされない どちらも日付が復元されない EXIFが欠けたまま移行される

手元のiPhoneで写真情報を見ると、どれも撮影日は正しく残っていました。
ところが、Android側にコピーされたファイルを調べると、ファイルの「作成日」「変更日」が移行日になっていて、撮影日のデータが読み取れません。

ここでポイントなのは、「撮影日」はどのように記録されているのか、ということです。
実は、スマートフォンの「アルバム」アプリが表示する日付は、写真ファイルの中にある「EXIF」という撮影情報だけではなく、OS内部のデータベースやクラウドの記録など、複数の情報を総合して判断しています。

一方、iPhoneでは内部に記録しているさまざまな補助情報を使って正しい撮影日を表示していても、コピーしたファイルにはその補助情報がついてこないため、Androidでは「撮影日が存在しないファイル」と見なされてしまうことがあります。

1.2. iCloud.comからダウンロードして移行

最初に試したのが、この方法でした。
しかし、ブラウザからダウンロードした写真は、作成日が必ず「ダウンロードした日」になります。

EXIFが残っている写真ならAndroid側で撮影日を再現できますが、古い写真のようにEXIFが欠けているデータは撮影日が復元されません。
そのため、ダウンロード時点が写真の「日付」になってしまうのです。

1.3. iPhoneのDCIMフォルダをパソコン経由でコピー

次にDCIMをそのままコピーしてみました。
こちらもダメでした。
DCIMに入っているのは必ずしも「実ファイル」ではなく、最適化されている写真は縮小版しか入っていません。日付の欠落はそのままコピーされ、Android側でも復元されませんでした。

2. 古い写真だけ日付が失われた理由

ひとつ不思議だったのが「古い写真だけ」日付が消えていたことです。
この理由は、2つが考えられます。

iPhoneの「iCloud写真」では、通常「ストレージを最適化」に設定されています。
この設定だと、古い写真はiPhone本体にフルデータが残らず、iCloud側に縮小版だけ置かれることがあります。縮小版は必要最低限の情報しか持たず、EXIFが欠けていることもあります。
つまり、コピーされる“実ファイル”の中には、すでに撮影日時が残っていなかったというわけです。

もう一つの可能性は、iPhone以前の携帯電話で撮影した写真データ。
携帯電話からiPhoneに写真を移行する段階で、撮影日のデータが含まれていなかった可能性もあります。

3. イメージキャプチャの写真の取り込み方

イメージキャプチャ.appは起動時にmacOSのフレームワーク「ImageCaptureCore」を使って、接続されているカメラやスキャナにアクセスします。
つまり、iPhoneをUSBケーブルでMacに接続したとき、イメージキャプチャが扱っているのは、基本的に「PTPベースのカメラインターフェース」です(iOSデバイスをカメラとして扱うレイヤ)。

「PTP/MTP(Picture Transfer Protocol / Media Transfer Protocol)」は、USBマスストレージと違ってファイルシステムをそのまま読み書きするわけではありません。
デバイスのファイルシステムには直接触らず、「写真データ」と「メタデータ」をAPI経由でやり取りするのです。

つないだiPhoneから ICCameraItem の一覧を取得し、各アイテムの属性(ファイル名・容量・撮影日・サムネイルなど)を問い合わせます。つまり、撮影日やその他のメタデータは、ファイルに埋め込まれたEXIFだけでなく、デバイス側のデータベースなどからOS側のドライバ/サービスが取り出します。
ImageCaptureCoreは、このような画像データを抽象化して、「イメージキャプチャ」アプリに渡すわけです。

iPhone側からメタデータとして「撮影日時」を取得したImageCaptureCoreが、Macにファイルとして保存するときには、EXIFには元の撮影日をそのまま書き出し、さらにファイルシステムの作成日・変更日も、その撮影日時に合わせて設定しています。
つまり、「単にファイルを保存している」のではなく、撮影日の情報を見た上で、POSIXファイル時刻(作成日・更新日)を意図的に書き換えているようです。

iPhone側では撮影日は内部DBで管理されているため、単なるファイルのコピーとは異なる結果になるわけです。
イメージキャプチャは、プロトコルやメタデータを解釈しながら動いていのです。

4. まとめ

今回の移行でわかったのは、
「iPhoneに表示されている撮影日」と「実際にファイルが持っている撮影日」は一致しない場合がある、という点です。
iPhone内部は多くの補助情報を使って正しく見せてくれますが、コピーされたファイルはEXIFがすべてです。
古い写真ではEXIFが欠けていることがあり、iCloud最適化設定が影響している可能性もあります。

撮影日を正しく移したい場合は、Macの「イメージキャプチャ」を使ってオリジナルを取り出す方法が確実でした。
日付が揃った状態でAndroidに移行できると、写真の並びが一気に元どおりになって安心します。

  1. 【自分用備忘録】「iCloud写真」から写真をダウンロードすると作成日=撮影日にならない問題 – TOMOKO OOSUKI