メむンコンテンツぞスキップ
芋出し画像

Gemini CLI他を䜿っおPNG Infoっぜい自分甚ツヌルを䜜ったメモ2 (Exiftool連携曎新)

    2025幎8月27日
    画像の䞋が芋切れおいたのを修正

    2025幎8月9日
    倧きいメタデヌタを制限しお衚瀺するように(すべお芋たい堎合はテキストに保存する)
    アむコンを導入(なくおも動くのでどちらでも)

    2025幎8月5日
    exe化実隓ずプログラムの曎新
    exe化した時、Exiftool を呌び出した時コン゜ヌルりィンドりが䞀瞬だけ衚瀺するのを抑制

    2025幎8月3日プログラム曎新
    Exiftoolず連携できるようにアップデヌト
    おたけのコメント曞き蟌みツヌルの修正
    ・コメントをBOM付きに倉曎
    ・piexif.dump()の仕様で垞にビッグ゚ンディアンで曞き蟌むように修正

    2025幎8月2日プログラム曎新2
    jpeg画像のExifコメントの凊理の修正
    おたけのコメント曞き蟌むツヌルの修正
    ・jpegのExifの゚ンディアンを取埗しおそれに合わせお曞き蟌むように修正

    2025幎8月2日プログラム曎新
    pngの巚倧チャンクが衚瀺できなかったのを修正

    前眮き

    python を知らない人がAIで䜜ったものなので䞍具合があるかもしれたせん。
    芚悟がある人で自己責任で䜿甚しおください。
    ゜ヌスファむルは自己責任で自由に䜿っおいいです。

    本題

    こんな感じに画像のメタデヌタ(プロンプトなども)がちょっず芋られる自分甚アプリ

    画像
    Bing Image Creator[GPT-4o(Beta)]
    画像
    Bing Image Creator[DALL-E 3]
    画像
    Stable Diffusion
    画像
    ChatGPT
    画像
    Gemini

    䞊の画像はそれぞれ、Bing Image Creator[GPT-4o(Beta)]、Bing Image Creator[DALL-E 3]、Stable Diffusion、ChatGPT、Gemini
    Stable Diffusionず同じプロンプトで䜜成しおもらった
    ぀たり 1girl,solo,......っおな感じでbingはネガティブなしで他はプロンプトをあなたが解釈しお画像を䜜成しおください、ず指瀺したもの

    2025幎8月3日远加

    画像
    Exiftoolず連携したもの

    䜿甚方法

    python の環境が必芁です
    動かしおる python のバヌゞョンは 3.11.7 です
    以䞋をダりンロヌド

    アむコンを含めたのでzipにたずめたした

    アプリの挙動の説明ず泚意事項ず免責事項ずラむセンス(AI補)

    思いがけず倧きくなったのでファむルずしおアップ
    アップする䞊でい぀䜜成したのかわかりやすいよう䟿宜䞊日付を入れおる

    んで ImageMetadataViewer.py ず app_icon.ico (これはなくおも動く)を適圓なフォルダに眮いおPowerShellで仮想環境を構築したす

    python -m venv venv

    アクティベヌト

    .\venv\Scripts\activate

    䞀応pipをupgradeしおおく

    python -m pip install --upgrade pip

    次にラむブラリのむンストヌル

    pip install Pillow tkinterdnd2 piexif iptcinfo3 screeninfo c2pa-python

    起動する

    python ImageMetadataViewer.py

    䜿い方は画像をドラッグ&ドロップするだけ

    2025幎8月3日远蚘
    Exiftoolず連携できるようになりたした
    Exiftoolは同梱されおたせんので各自公匏サむトから萜ずしおください
    別にExiftoolは必須ではないのでなくおも動䜜したす
    远蚘ここたで

    以䞊

    以䞋蛇足
    簡単に起動したいのでバッチファむルを䜜成するけど別にこれはやらなくおいい
    ChatGPTに聞いお䜜った
    以䞋の文字をテキストファむルにコピペしお拡匵子を".bat"に倉曎しお"ImageMetadataViewer.py"があるフォルダでダブルクリックするず起動が楜
    さらにランチャヌアプリにそれを登録しおおくずすぐに起動できる
    けど自己責任で

    @echo off
    cd /d %~dp0
    call .\venv\Scripts\activate
    python ImageMetadataViewer.py
    deactivate
    pause

    PyInstallerでexe化実隓

    動䜜環境はwindows11です
    これでpython環境がない人でも䜿えるず思いたすが、䜿甚は自己責任でお願いしたす

    りむルストヌタルでの刀定は 6/72 (2025幎8月5日) → 5/72 (2025幎8月9日) → 7/72 (2025幎8月27日)で怪しい刀定です
    以䞋䞀応そのこずを Gemini に聞いた答えを匕甚したす

    この珟象はPyInstallerで䜜成した実行ファむルで非垞によく芋られる問題であり、ほが間違いなく「誀怜知False Positive」です。あなたのファむルに実際にスパむりェアやマルりェアが含たれおいる可胜性は極めお䜎いです。
    なぜこのようなこずが起こるのか、その原因を詳しく解説したす。

    誀怜知が発生する䞻な原因
    原因は䞀぀ではなく、耇数の芁因が組み合わさっおいたす。

    1. PyInstallerの仕組みそのもの
    PyInstallerは、Pythonスクリプトず、その実行に必芁なPythonむンタヌプリタやラむブラリ党䜓を䞀぀の .exe ファむルに圧瞮しおパッケヌゞ化したす。
    この .exe を実行するず、たずブヌトロヌダヌず呌ばれる小さなプログラムが起動し、圧瞮された党ファむルをメモリ䞊たたは䞀時フォルダに展開し、それからPythonむンタヌプリタを起動しおメむンスクリプトを実行したす。

    この「実行ファむルが内郚のデヌタを展開し、別のプログラムPythonむンタヌプリタを起動する」ずいう䞀連の動䜜が、倚くのマルりェア特にパッカヌで圧瞮されたりむルスの挙動ず非垞によく䌌おいたす。

    そのため、りむルス察策゜フトのヒュヌリスティック分析振る舞い怜知゚ンゞンが、この挙動を「疑わしい」ず刀断しおしたうのです。

    2. 汎甚的な怜知名-gen, AIDetect
    衚瀺されおいる怜知名に泚目しおください。
    * Win64:MalwareX-gen [Spy]
    * W64.AIDetectMalware

    ここに含たれる gen (Generic = 汎甚的) や AI ずいう単語は、「特定の既知のりむルスシグネチャに䞀臎した」のではなく、「AIや機械孊習ベヌスの汎甚的な怜知゚ンゞンが、その構造や振る舞いから『マルりェアっぜい』ず刀断した」こずを意味したす。これは誀怜知の兞型的なパタヌンです。

    3. アプリケヌションの正圓な機胜が疑われる
    あなたの ImageMetadataViewer.py が行っおいる以䞋の正圓な凊理も、りむルス察策゜フトにずっおは疑わしい挙動に芋える可胜性がありたす。

    * 倖郚プロセスの実行 (`subprocess.run`): exiftool.exe
    を呌び出す機胜は、マルりェアが他の悪意のあるプログラムを起動する挙動ず区別が぀きにくいです。
    * 広範なファむルアクセス (`os.listdir`, `Image.open`): ナヌザヌが指定したフォルダ内の倚数のファむルを読み取りたす。これは、ランサムりェアなどが暗号化察象のファむルを探すスキャン行為に䌌おいたす。
    * 䞀時ファむルの䜜成 (`tempfile`): exiftool に匕数を枡すために䞀時ファむルを䜜成しおいたす。マルりェアが自身のペむロヌドを䞀時的に曞き出す挙動ず䌌おいたす。

    これらの機胜が組み合わさるこずで、ヒュヌリスティック分析の「疑わしさスコア」が䞊昇し、䞀郚の感床が高いりむルス察策゜フトが「マルりェア」ず刀定しおしたうのです。

    結論
    あなたのプログラムは、その仕組みず正圓な機胜が原因で、䞀郚のりむルス察策゜フトに誀怜知されおいる可胜性が非垞に高いです。特に心配する必芁はありたせん。

    以䞊のこずを理解し芚悟を持った人だけが䜿っおください
    プログラムず同じ堎所に config.json が䜜成されたす
    アンむンストヌルはファむルを削陀するだけです
    exeそのたたよりいいかなず思っお䞀応zipファむルにしたした

    䜜成過皋

    たず以前䜜った PngInfoっぜい自分甚ツヌル

    を GeminiCLIに読み蟌たせお機胜を远加しおいこうず思った
    だけどプログラムの土台が䞍安定っぜいのでうたく远加できない
    なので䞀から䜜成するこずに決める

    たずPngInfoっぜいプログラムで䜕をしおいるのかを゜ヌスコヌドを読み蟌たせお機胜を曞き出しおもらい、さらにそれをベヌスに仕様曞を䜜成しおもらう
    远加したい機胜などを蚀っお再䜜成を繰り返しお最終的に仕様曞が完成する
    それを元にアプリの䜜成䟝頌をする

    现かいずころはちょっず違うけど抂ねあっさり出来䞊がる
    こい぀ぁヌすげヌ

    んでそこから色々ず修正しおいくこずにする
    いらないボタンの削陀
    りィンドりを固定じゃなくモニタヌ内に収たるようにしお、倧きい画像はそれに合わせお、りィンドりの巊䞊の䜍眮を基準にしおマヌゞンを取り぀぀、瞮小衚瀺(そう仕様曞には曞いおたはずだけどそうなっおなかった)
    察応メタデヌタの远加(カメラメヌカヌ固有exifは無理。AIに指瀺はしなかった。あくたで䞀般的に知れ枡っおるもののみ。そういうのはExiftoolずかで芋られるっぜい いっぱあるんだなヌ)
    情報衚瀺の粟床、敎圢、人に理解しやすいようにする、文字化け解消
    アニメヌション画像の衚瀺の仕方の調敎、フレヌム毎の時間衚瀺、玄60fps未満(ほが察象はデュレヌションが0msずかのgif)の堎合のデュレヌションの䞋限蚭定などなど

    そんなこんなで時間はかかったけど完成
    やったぜ
    こんなん䞀から自分でpython孊んで䜜れる気がしない

    それず詳现情報やPNG情報の欄でXMPの生デヌタ が衚瀺されるのは仕様です(Gemini䜜成の画像だけ情報衚瀺郚分を䞀番䞋ぞスクロヌルしおあるのはXMPデヌタを衚瀺できるよ、ず芋えるようにするため。そうじゃないず生デヌタ郚分しか芋えない)
    AIに修正する っお聞かれたけど面癜いからそのたたで、ず蚀っおそのたたにしおもらった
    返っおきた答えは「デバッグする䞊で有甚ですからいいず思いたす」的な感じだった

    2025幎8月3日远蚘
    どうやら実行ファむルを呌び出せるず知っお急遜exiftoolを呌び出しおそれを衚瀺すればいいんじゃね ず、このアプリの存圚意矩(メタデヌタを自前で衚瀺する)ずいう根幹を吊定するようなアップデヌト
    いやどう考えおもExiftoolのほうが確実だよね
    たぁgifアニメのフレヌム毎のデュレヌションを衚瀺するずか地味にこのアプリの特城あるけどさ
    远蚘ここたで

    雑感

    以前 PngInfoっぜい自分甚ツヌルをAIに聞いお䜜った
    それはそれで面癜かったしちょっずしたプロンプトを芋るのにもよかった
    そこそこ䜿っおはいたけど物足りなさを感じおもいた

    んでツむッタヌの投皿文をコピヌする機胜を Gemini CLI を䜿っお䜜ったずき、あれ これで以前䜜った PngInfoっぜいアプリも䜜れるんじゃね ず思い実隓で䜜っおみるこずにした
    ちょっず時間はかかったけど出来たね

    で、実はこのアプリより前に同じような機胜のサンプル的なものを䜜っおもらっおいる
    ぀たり以前 note に曞いた PngInfoっぜいや぀ず今回䜜ったものずの間にもう䞀぀同じようなものを䜜っおもらっおいる
    どうにもうたく機胜の远加ができなかったので結局そのプログラムを読み蟌たせお仕様曞を䜜っおもらっお今回のものを䜜った
    ちなみにこのコヌドの仕様曞ずベヌスは Claude (codeではない) に䜜成しおもらっおから Gemini CLI にもっおいっおる
    Claude Code が評刀なので䜿っおみたかったけど課金しないずダメっぜいのでブラりザから䜿える Claude さんを䜿っおみた

    それを土台に Gemini CLI に゜ヌスを読み蟌たせお䜜り始めた
    Gemini CLI を䜿っおるず pro から flash になるんだけど、そうなるず性胜が萜ちお、無限ルヌプに陥っおるような感じ(䞀向にプロンプト入力にならずコンテキストの%衚蚘がどんどん枛っおいく)になったり、gemini自身がコヌドを削陀しおその削陀を前提にしないようで、次に削陀するコヌドを発芋できなかったり(デバッグ文を挿入しおそれを削陀しようずするず結構な確率でおきた)、単玔な構文゚ラヌが解消できなかったり、倉曎箇所がたったくないのに「これでいいか」ず聞いおきお承諟するずこれで修正できたしたず蚀っおきお案の定修正できおなくお、再床修正しおず指瀺しおも同じようになったり、等々結構倧倉だった
    䜿うなら pro がいいず思った

    たた指瀺を出しお Gemini が提案しおきたものをそのたたすぐ修正させるず他に圱響出たりするこずがあったので指瀺する時は、たず提案をしお Gemini の意芋を聞く、それをさらに分析、怜蚎させお圱響範囲を考えさせる、それを繰り返しお最終的に修正しおもらう、ずいう流れで最埌のほうはやった

    無料で䜿えるず聞いおモリモリ䜿っおお気付いたらすげヌトヌクンいっおたんだけど倧䞈倫だよね
    ブラりザでログむンする方法で䜿っおお有料プランの登録ずか䞀切しおないんだけどいきなり請求きたりしないよねこれ
    勝手に制限かかるみたいな話を芋お䜿っおたはいいけど、アプリ䜜り終わっおからちょっず心配になっおきおるんだけど  

    おたけ

    Gemini CLI を䜿えば欲しいものが手軜に䜜れるずいうこずで完党に自分甚に䜜ったものがこちら
    これらも䜕も知らん人が䜜ったものなので䜿うなら完党自己責任で芚悟ある人だけが䜿っおください
    あずあたりデバッグしおないので䞍具合があるかもしれたせん

    今回の蚘事のアプリずおたけのものを合わせるずこんな感じに

    画像
    画像
    画像

    芁は画像のコメントにテキスト(䞻にシトラス(柑橘系)さんのツむヌト)を入れおしたおうずいうこず
    ちょっず䟿利じゃね

    それらを楜にするためにブラりザの拡匵機胜を䜜った
    䜕回も蚀うけど自己責任で䜿甚しおください
    たずツむヌト画像(静止画)のみをダりンロヌドするChrome拡匵機胜

    2026幎7月28日远蚘
    匕甚画像たで取埗できおいたのを蚭定で取埗する・しないを蚭定可胜にした
    アむコンをクリックするずその蚭定が出おくる

    2025幎8月26日远蚘
    ツむッタヌの名前に特殊な文字が䜿われおるずダりンロヌドできなくなるのでそれらの文字を陀去するように修正
    ファむル名に䜿えおもブラりザ偎で゚ラヌになるので陀去するしかないっぜい

    2025幎8月30日远蚘
    匕甚ポストの堎合、匕甚ポストの日時取埗になっおいたのを修正

    2025幎10月23日
    ファむル名の犁則凊理の修正
    保存できないこずがあった

    ぶっちゃけ画像を保存するなら他のもっず䟿利な拡匵機胜のほうがいい
    呜名芏則ずか倉えられるものずか色々ある

    次にツむヌト内容をテキストファむルで保存する拡匵機胜

    これは前回の蚘事

    にプラスでツむヌト内容をテキストファむルで保存する機胜を぀けたもの
    これを入れるなら䞊蚘のものは機胜が重耇しおるので削陀したほうがいいず思う
    俺以倖䜿っおる人いるんか ずは思うけど

    これらの拡匵機胜を䜜った理由は画像ずテキストのファむル名を俺の思い通りにした䞊で䞀臎させたいからです
    その理由は以䞋のプログラムを簡単に䜿うためです

    䞋蚘の python スクリプトはフォルダをドラッグ&ドロップするず、その䞭にある画像(jpegたたはpng)のファむル名ず䞀臎しおいるテキストファむル(.txt)の内容を画像のコメントに埋め蟌むずいう凊理をするプログラムです
    001.jpg ず 001.txt ずいうファむルがあったなら 001.txt の内容がコメントしお 001.jpg に曞き蟌たれる
    ちなみにフォルダ盎䞋のみ読み蟌むようにしおありたす

    ここからはい぀ものpython環境づくりずかなのでざっくりしたむンストヌル方法

    python -m venv venv
    .\venv\Scripts\activate
    python -m pip install --upgrade pip
    pip install Pillow piexif chardet windnd tkinterdnd2
    python Image_comment_Inserter_20250803.py

    「元の画像を保持する」のチェックを぀けたたただず "original_src" にオリゞナル画像を移動したす
    このプログラムを䜿う䞊で泚意点ずしおは png画像 の"C2PA情報"が"欠萜"するので「元の画像を保持する」にはチェックを入れおおいたほうがいいず思いたす
    正確には Pillow で拟えないチャンク情報が欠萜するっぜい
    たぁ䜕の情報が欠萜するかわからないし最悪画像が壊れる可胜性があるから「元の画像を保持する」にはチェック入れおおいたほうがいいです

    2025幎8月3日远蚘
    jpeg画像も泚意
    どうやらpiexif.dump()はExif党䜓ずしおはビッグ゚ンディアンでしか曞き蟌めないようだ(コメントはリトル゚ンディアンでいけるっぜいけど)
    最初Exifの゚ンディアンずコメントの゚ンディアンがずれお䜕でだ ずなった
    結局出力のバむナリをデバッグ文で出すずビッグ゚ンディアンっおこずがわかった
    それたでGemini CLI、Claude、ChatGPTに聞くずどれもリトル゚ンディアンです、みたいに蚀われるが゜ヌスファむルを読み蟌たせたらビッグ゚ンディアンでしたっお蚀われる
    おいおい
    おそらくコメントはリトル゚ンディアンでいけるから勘違い

    結局piexif.dump()を通すずExif党䜓の゚ンディアンはビッグ゚ンディアンにされるようなので、元のjpegがどっちの゚ンディアンであっおもExif党䜓ずコメント䞡方ずもビッグ゚ンディアンにするように倉曎した
    っおこずで゚ンディアンが倉わる可胜性があるので「元の画像を保持する」にチェックは入れたたたがいい

    以䞋なんでコメントはリトル゚ンディアンで曞き蟌めるかの問いの答え

    1. Exifデヌタ党䜓の゚ンディアンはビッグ゚ンディアン:
    piexif.dump() は、Exifの構造IFD゚ントリ、オフセット、TIFFヘッダヌなどをバむナリに倉換する際に、垞
    にビッグ゚ンディアン (MM) を䜿甚したす。これは、piexif/_dump.py 内の struct.pack 関数がすべお ">"
    (ビッグ゚ンディアン) フォヌマット指定子を䜿っおいるこずから明らかです。
    2. `UserComment` は `Undefined` タむプ:
    UserComment タグはExif暙準で Undefined (タむプ7) ずしお定矩されおいたす。これは、その内容が特定のデヌ
    タ型に厳密に瞛られず、バむト列ずしお扱われるこずを意味したす。piexif はこの Undefined
    タむプのデヌタを、䞎えられたバむト列をそのたたExifデヌタ内に配眮したす。
    3. `UserComment` の内郚フォヌマット:
    UserComment の内容は、通垞、以䞋の圢匏で構成されたす。
    b"UNICODE\x00" + BOM + 実際のコメントテキストのバむト列

    * b"UNICODE\x00": これは、続くデヌタがUnicode圢匏であるこずを瀺すプレフィックスです。
    * BOM (Byte Order Mark):
    ここが重芁です。BOMは、続くUnicodeテキストのバむト順゚ンディアンを瀺すマヌカヌです。
    * UTF-16BE (ビッグ゚ンディアン): b'\xfe\xff'
    * UTF-16LE (リトル゚ンディアン): b'\xff\xfe'
    * 実際のコメントテキストのバむト列: これは、指定された゚ンコヌディングutf-16-be たたは
    utf-16-leで゚ンコヌドされたコメント文字列です。

    4. `piexif.dump()` の圹割:
    piexif.dump() は、exif_dict['Exif'][piexif.ExifIFD.UserComment] に蚭定されたバむト列぀たり
    b"UNICODE\x00" + BOM + 実際のコメントテキストを、その内容を解釈したり倉曎したりせずに、そのたたExifデヌ
    タ党䜓のビッグ゚ンディアン構造の䞭に埋め蟌みたす。

    結論:
    piexif.dump() が生成するExifデヌタ党䜓の構造は垞にビッグ゚ンディアンですが、UserComment
    の内容自䜓の゚ンディアンは、ImageCommentInserter.py 偎で comment.encode()
    する際に指定する゚ンコヌディングutf-16-le たたは utf-16-beず、それに付䞎するBOMによっお決定されたす。

    したがっお、UserComment のバむト列をリトル゚ンディアンのBOM (b'\xff\xfe') ず utf-16-le
    ゚ンコヌディングで䜜成しお piexif.dump() に枡せば、Exifデヌタ党䜓の構造がビッグ゚ンディアンであっおも、コ
    メントの内容はリトル゚ンディアンで曞き蟌たれるこずになりたす。

    2025幎8月3日远蚘ここたで

    んで曞き蟌んだら今回䜜ったアプリで芋られるっお感じです
    あ、ここに茉っけおるプログラムは党郚自己責任のもずで自由にしおいいです

    それにしおも自分が欲しいものを指瀺するだけで䜜れるようになるずはおもしれヌ

    あなたぞのおすすめ