iCloud写真にアップロードできない?「このファイルのサイズが不正です」の対処法

iCloudに写真をアップロードしようとして「このファイルのサイズが不正です」と表示されたときの原因と対処法を解説します。

iCloud写真にアップロードできない?

iCloudに写真をアップロードしようとしたとき、「このファイルのサイズが不正です」や「The dimensions of this file is invalid」と表示され、困ったことはありませんか?僕も昔のiPhoneで撮った写真をアップロードしていて、この問題に遭遇しました。

実はこれ、画像自体に問題があるのではなく、Exifという隠れた情報の中のサイズデータが欠けていることが原因です。

この記事では、PythonとExifToolを使ってそのExif情報を正しく修正する方法を紹介します。

この方法を使えば、複数の画像でも一括で修正でき、iCloudにスムーズにアップロードできる状態に整えることができます。

症状

iCloud 写真に JPEG画像をアップロードしようとしたら、

このファイルサイズは無効です」または「The dimensions of this file is invalid

というエラーが出て、アップロードできないことがあります。

原因:Exifデータの「画像サイズ」が0になっている

画像の実際のサイズは正常でも、Exifメタデータの中にある ExifImageWidthExifImageHeight0 のままになっていると、iCloudがその画像を「不正な画像」と判断してアップロードを拒否します。

対処法:Exifデータに正しい画像サイズを設定する

以下のPythonスクリプトを使えば、Exifサイズが未設定のJPEG画像を一括で修正できます。

了解です!以下は「必要なもの」のセクションを、インストール確認 → なければインストール方法を案内という形に書き換えたバージョンです👇

必要なツールの確認とインストール

Exif情報を修正するには、以下のツールが必要です。まずはそれぞれがインストールされているかを確認しましょう。

Python 3.x の確認

ターミナル(またはコマンドプロンプト)で以下を実行してください。

python3 --version

Python 3.12.4 のように表示されればOKです。

command not found などと表示された場合は、Python公式サイトからインストールしてください。

ExifTool の確認

ターミナル(またはコマンドプロンプト)で以下を実行してください。

exiftool -ver

12.76 のようにバージョン番号が表示されればOKです。

command not found などと表示された場合は以下の手順でインストールしてください。

macOS の場合(Homebrewを使って)

brew install exiftool

Windows の場合

ExifTool公式サイト から Windows版をダウンロードし、展開後 exiftool(-k).exeexiftool.exe にリネームして使うようです。

僕はMacなので試していませんが、詳しくは「Installing ExifTool」をご覧ください。

Pillow ライブラリ(Pythonで画像サイズ取得に使用)

以下を実行してインストールします。

pip3 install Pillow

これで準備が整いました。

続いて、Pythonスクリプトを使ってExif情報を修正していきましょう。

スクリプトの作成

画像が入っているディレクトリに、テキストエディタで以下のコードをコピペして fix_exif_dimensions.py というファイルを作成します。

import os
import subprocess
from PIL import Image
import json

target_dir = "./images"
extensions = (".jpg", ".jpeg", ".JPG", ".JPEG")

for filename in os.listdir(target_dir):
    if filename.endswith(extensions):
        filepath = os.path.join(target_dir, filename)

        try:
            with Image.open(filepath) as img:
                actual_width, actual_height = img.size

            result = subprocess.run(
                ["exiftool", "-j", "-ExifImageWidth", "-ExifImageHeight", filepath],
                stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True
            )
            exif_data = json.loads(result.stdout)[0]

            exif_width = exif_data.get("ExifImageWidth")
            exif_height = exif_data.get("ExifImageHeight")
            if exif_width == actual_width and exif_height == actual_height:
                print(f"⏩ スキップ: {filename}(Exifは正しく設定済み)")
                continue

            subprocess.run([
                "exiftool",
                f"-ExifImageWidth={actual_width}",
                f"-ExifImageHeight={actual_height}",
                "-overwrite_original",
                filepath
            ], check=True)

            print(f"✔ 修正完了: {filename}({actual_width}x{actual_height})")

        except Exception as e:
            print(f"⚠ エラー: {filename} - {e}")

スクリプトの実行手順

今作成した「fix_exif_dimensions.py」と同じ場所に「 images 」フォルダを作り、テスト用に画像をコピーして数枚入れます。

その後、ターミナルで以下のように実行します。

python3 fix_exif_dimensions.py
Clean Shot 2025 03 30 at 06 48 47 2x

すると、ターミナルに以下のように表示されます。Exif情報がおかしいものは修正し、Exif情報が正しいものはスキップするようになっています。

Clean Shot 2025 03 30 at 07 04 39 2x

アップロード成功

修正された images ディレクトリの中の画像を iCloud にアップロードしてみましょう。

Exifサイズが正しく設定されれば、iCloud 写真に正常にアップロードできるようになります。

補足

写真を開いてみると縦長の画像なのに、Exif情報では横幅の方が長いということがあります。

これは、Exif情報では写真を常に横長の情報として保存していて、「 Orientation 」という項目でどのように回転させるかの情報を保持しています。

なので、Exif情報の横幅と高さの関係は、常に横長になっていて問題ないようです。

Published 2025-03-30
Updated 2025-03-31

⚡️ 話題の一冊 ⚡️