魔法の呪文・・・またたび♪♪♪ | 60歳を迎えて、思うこと。

60歳を迎えて、思うこと。

いつの間にか、「60」という年月が経ちました。
残り少ないか多いか?わかりませんが。
じじぃ~の「ひとりごと」を細々と続けられれば。。。

魔法の呪文・・・またたび♪♪♪

むか~~~し
むかし

ずっと
むかしから


画像集めが 趣味!?
だったw

まあ 内容は ご想像に・・・

でも

愛用の 画像びゅわ~ 
「Vix」

画像が表示されない!

しばしば いぬいぬ

でも

近年・・・
あれ???


ペイントなら 表示できるぞ
フォトなら 表示できるぞ

が 散見される

【Gemini】様に
泣きついた


なんで~~~

それは・・・

というわけで

拡張子と中身(画像)が
ちゃんと 紐づいているか?



チェッカーすくりぷと!

# ==== ちぇっか~
# 【Gemini】様 作成
# 15万ファイル、30GB!なかなかのボリュームですね。
# 現在のスクリプトをベースに**「表示(GUI)を捨てて、爆速で全ファイルをスキャン&隔離する」**専用の「仕分け職人」に改造しましょう。
# ### 🛠️ 15万枚スキャン&隔離スクリプト(CUI版)
# 表示機能を省き、ログ出力とファイルの移動(隔離)に特化させました。


import os
import shutil
from PIL import Image

# --- 設定 ---
# チェックしたい親フォルダ
INPUT_DIR = r"F:\画像ふぉるだ"

ISOLATION_DIR = r"F:\偽装画像-隔離ふぉるだ" # 隔離先のフォルダ
TARGET_EXTENSION = '.jpg'

def fast_checker():
    # 隔離フォルダがなければ作成
    if not os.path.exists(ISOLATION_DIR):
        os.makedirs(ISOLATION_DIR)

    count_total = 0
    count_fake = 0
    count_error = 0

    print(f"--- スキャン開始 ---")
    print(f"対象フォルダ: {INPUT_DIR}")

    # os.walkでサブフォルダまで全部回る
    for root, _, files in os.walk(INPUT_DIR):
        for file in files:
            if file.lower().endswith(TARGET_EXTENSION):
                count_total += 1
                full_path = os.path.join(root, file)
                
                try:
                    # 画像のヘッダーだけを高速に読み込む
                    with Image.open(full_path) as img:
                        actual_format = img.format # JPEG, WEBP, PNGなど
                    
                    if actual_format != 'JPEG':
                        # 偽装判明!隔離する
                        count_fake += 1
                        dest_path = os.path.join(ISOLATION_DIR, file)
                        
                        # 同名ファイルが隔離先にあった場合の対策
                        if os.path.exists(dest_path):
                            dest_path = os.path.join(ISOLATION_DIR, f"{count_fake}_{file}")
                        
                        shutil.move(full_path, dest_path)
                        print(f"【隔離】{file} (正体: {actual_format})")
                        
                except Exception as e:
                    # そもそも画像として壊れている場合
                    count_error += 1
                    print(f"【エラー】{file} : {e}")

                # 1000枚ごとに進捗を表示(安心用)
                if count_total % 1000 == 0:
                    print(f"... 現在 {count_total} 枚チェック完了")

    print(f"\n--- 完了報告 ---")
    print(f"総チェック数: {count_total} 枚")
    print(f"隔離成功(偽装): {count_fake} 枚")
    print(f"読込不能(破損): {count_error} 枚")
    print(f"隔離先: {ISOLATION_DIR}")

if __name__ == "__main__":
    fast_checker()


### ⚡ このスクリプトのポイント
# 1.  **再帰的スキャン:** `os.walk` を使っているので、指定したフォルダの中にある子フォルダ、孫フォルダまで全部自動で潜ります。
# 2.  **高速化:** `with Image.open()` を使い、中身を画面に描画せずに「形式判定だけ」してすぐ閉じるので、15万枚でも現実的な時間(PC性能によりますが数分〜数十分程度)で終わります。
# 3.  **隔離(MOVE):** `shutil.move` で、偽装JPGを物理的に別フォルダへ移動させます。これでVixのリストから「開けない邪魔な奴ら」が一掃されます。
# 4.  **同名ファイル対策:** 15万枚もあると、別々のフォルダに同じ `001.jpg` があるかもしれませんが、移動時に上書きされないよう連番を振る処理を入れています。
# ### 実行前の注意
# * **隔離フォルダ (`ISOLATION_DIR`)** は、チェック対象の外(同じFドライブ内なら移動が瞬時です)に作るのがおすすめです。
# * まずは、少ないファイルが入ったテストフォルダで動くか試してみてくださいね。
# 15万枚の「お掃除」、応援しています!終わった後のスッキリ感はすごそうですね。
# # ==============================

じっこうけっか!
偽装かどうか?点検対象       30,482,956,288 B 100%
143471 ふぁいる

偽装判定されて隔離された     503,758,848 B 100%
1612 ふぁいる

多いのか??? 少ないのか???
それは じじぃ~ にも
わっからん

じじぃ~