Xで画像を見ていると、AIで生成と表示されることがあります。
地味に気になってました。
画像の見た目からAI生成だと判断しているのでしょうか。
それとも、画像ファイルの中にある情報を読んでいるのでしょうか。
同じAI生成画像をリサイズ、JPEG変換、スクリーンショットにして、Xへ投稿したときの表示を比べてみます。
なお、Xがラベルを付ける詳しい仕組みは公開されていません。今回の結果だけで内部の判定方法を特定することはできません。自分の環境でどこまで変化するのかを確かめます。
XのAIで生成ラベルとは?
Xのメディアリテラシーに関する案内には、加工またはAIで生成された画像や動画にラベルを表示する取り組みが書かれています。英語の案内ではMade with AIという表記ですが、日本語環境ではAIで生成と表示されます。

ただし、画像のどこを見て表示を決めるのかまでは書かれていません。
そこで最初に、画像ファイルには何が入っているのか調べました。
普段見ている画像ファイルには、画面に表示される色の情報だけでなく、撮影日時や撮影機材、利用したソフトウェアなどが入っている場合があります。このような画像に付随する情報を、メタデータと呼びます。
メタデータは有名ですが、もう一つがC2PAです。これは、画像がどのように作られ、編集されたのかを記録し、途中で書き換えられていないか確認できるようにする仕組みです。
ただし、C2PAが見つからないから人間が作った画像、という意味ではありません。OpenAIのContent provenance checkの説明にも、情報が検出されない理由として、メタデータの削除や非対応の生成方法などがあり、AI生成ではない証明にはならないと書かれています。
今回は、画像ごとにメタデータとC2PAを確認し、その結果とXの表示を並べます。
今回試す4枚
AIで生成した1枚の画像から、次の4枚を用意します。
| 画像 | やること |
|---|---|
| 元画像 | 生成サービスからダウンロードしたまま使う |
| リサイズ | 長辺を1024pxへ縮小する |
| JPEG変換 | PNGからJPEGへ保存し直す |
| スクリーンショット | macOSの画面に表示して撮影する |
画像の内容は同じです。変えるのは、普段でも行いそうな保存方法だけにしました。
この比較で見たいのは、次の2点です。
- 加工後のファイルに、どの情報が残っているか
- Xへ投稿したとき、
AIで生成の表示が変わるか
ラベルを消す方法を探すことが目的ではありません。画像を扱う過程で、来歴を示す情報がどう変わるのかを確認します。
検証用のファイルを用意する
作業用のディレクトリは次のようにしました。
x-ai-image-label/
├── input/
│ └── original.png
├── output/
├── results/
├── make_variants.sh
├── inspect_images.sh
└── RESULTS.md画像の変換には、macOSに最初から入っているsipsを使います。
画像内の付加情報を読むためにExifTool、C2PAを確認するためにc2patoolを入れました。
brew install exiftool c2patoolインストール後、バージョンを確認します。
exiftool -ver
c2patool -VAI生成画像を保存する
今回は、次の指示で画像を1枚生成しました。
埼玉県民と千葉県民が仲良くしている写真ありそうでなさそうなキワどいところを攻めました。

生成された画像を、そのままダウンロードします。ここでスクリーンショットを撮ると比較の基準にならないため、最初は生成サービスから保存されたファイルを使いました。
ファイル名をoriginal.pngにして、input/へ置きます。
input/original.pngリサイズとJPEG変換を行う
比較用の画像を作ります。
bash make_variants.sh input/original.pngスクリプトでは、元画像のコピー、長辺1024pxのPNG、JPEGへ変換した画像を作ります。
3枚の画像をoutput/へ作成しました。
04-screenshot.pngはREADME.mdの手順で作成してください。最後の1枚は、元画像をプレビューで開き、画像全体が入るようにmacOSでスクリーンショットを撮りました。画像部分だけを切り出し、output/04-screenshot.pngとして保存します。
output/
├── 01-original.png
├── 02-resized.png
├── 03-converted.jpg
└── 04-screenshot.png
画像ファイルの中を確認する
Xへ投稿する前に、4枚の画像にどの情報が入っているか確認します。
bash inspect_images.shExifToolの結果はmetadata.json、c2patoolの結果はc2pa.jsonへ保存しました。C2PAが見つからない場合の表示も、c2pa-error.txtへ残します。
[{
"SourceFile": "output/01-original.png",
"ExifTool:ExifToolVersion": 13.55,
"System:FileName": "01-original.png",
"System:Directory": "output",
"System:FileSize": "2.2 MB",
"System:FileModifyDate": "2026:09:15 23:06:25+09:00",
"System:FileAccessDate": "2026:09:15 23:08:38+09:00",
"System:FileInodeChangeDate": "2026:09:15 23:06:25+09:00",
"System:FilePermissions": "-rw-r--r--",
"File:FileType": "PNG",
"File:FileTypeExtension": "png",
"File:MIMEType": "image/png",
"File:ExifByteOrder": "Big-endian (Motorola, MM)",
"PNG:ImageWidth": 1536,
"PNG:ImageHeight": 1024,
"PNG:BitDepth": 8,
"PNG:ColorType": "RGB",
"PNG:Compression": "Deflate/Inflate",
"PNG:Filter": "Adaptive",
"PNG:Interlace": "Noninterlaced",
"PNG:SRGBRendering": "Perceptual",
"IFD0:Orientation": "Horizontal (normal)",
"ExifIFD:ColorSpace": "sRGB",
"ExifIFD:ExifImageWidth": 1536,
"ExifIFD:ExifImageHeight": 1024,
"XMP-x:XMPToolkit": "XMP Core 6.0.0",
"XMP-tiff:Orientation": "Horizontal (normal)",
"Composite:ImageSize": "1536x1024",
"Composite:Megapixels": 1.6
}]
結果から、AI生成に関係しそうな項目だけを抜き出します。
| 画像 | C2PA | 生成・編集ソフトに関する情報 |
|---|---|---|
| 元画像 | なし(No claim found) | XMP Core 6.0.0 |
| リサイズ | なし(No claim found) | XMP Core 6.0.0。画像は1024×682だが、XMPには元の1536×1024も残っていた |
| JPEG変換 | なし(No claim found) | 基本的なEXIF、JFIF、色空間。XMP Toolkitの情報は見つからなかった |
| スクリーンショット | なし(No claim found) | UserComment: Screenshot、Apple製ディスプレイのICCプロファイル |
4枚をXへ投稿する
4枚は、1枚ずつ別の投稿へ添付しました。複数枚をまとめると画像の扱いが変わる可能性があるためです。
投稿文は同じにし、画像だけを差し替えます。
AI生成画像の表示を確認するためのテスト投稿です。投稿後、自分の画面でAIで生成の表示があるか確認します。

4枚とも AIで生成 が出ません。
結果
実行結果を並べると、次のようになりました。
| 画像 | C2PA | Xの「AIで生成」表示 |
|---|---|---|
| 元画像 | なし | 表示なし |
| リサイズ | なし | 表示なし |
| JPEG変換 | なし | 表示なし |
| スクリーンショット | なし | 表示なし |
くやしかったので、別の画像でも試してみた
今度は海あり埼玉です。

c2patoolからも結果が返ってきました。
{
"claim_generator_info": [
{
"name": "OpenAI Media Service API"
}
],
"assertions": [
{
"label": "c2pa.actions.v2",
"data": {
"actions": [
{
"action": "c2pa.created",
"softwareAgent": {
"name": "gpt-image",
"version": "2.0"
},
"digitalSourceType": "http://cv.iptc.org/newscodes/digitalsourcetype/trainedAlgorithmicMedia"
}
]
}
}
]
}Macのプレビューでjpgに変換したバージョンにはラベルがつきません。
先ほどの画像にはなかった、作成元に関する情報です。
claim_generator_infoにはOpenAI Media Service API、画像を作ったソフトウェアにはgpt-image 2.0と入っています。trainedAlgorithmicMediaは、学習済みの仕組みによって作られたメディア、という意味のようです。
結果全体ではvalidation_stateがValidになっていましたが、署名を信頼できるものとして登録できていないという警告も出ています。今回は署名元の信頼性までは判断せず、C2PAの情報が画像内に存在するかを比較します。
この元画像をXへ投稿すると、今度はAIで生成と表示されました。

続いて、同じ画像をリサイズ、JPEG変換、スクリーンショットにして確認します。
| 画像 | C2PA | Xの「AIで生成」表示 |
|---|---|---|
| 元画像 | あり | 表示あり |
| リサイズ | なし(No claim found) | 表示なし |
| JPEG変換 | なし(No claim found) | 表示なし |
| スクリーンショット | なし(No claim found) | 表示なし |
リサイズ、JPEG変換、スクリーンショットの3枚からは、C2PAが見つかりませんでした。
元画像ではC2PAが見つかり、XにもAIで生成と表示されました。
この検証だけではわからないこと
仮にC2PAが残った画像だけにラベルが表示されても、XがC2PAだけで判定しているとは言い切れません。別の情報や画像そのものも見ている可能性があります。
反対に、どの画像にも表示されなかった場合も、XがAI生成画像を見分けられなかったとまでは言えません。Xの案内では表示対象の拡大が説明されていますが、地域、アカウント、アプリなどの条件が同じとは限らないためです。
今回書けるのは、同じ画像を4通りで保存し、自分の環境から投稿したところ、どの表示になったかまでです。
やってみた感想
不思議に思っていたAIで生成ラベルですが、Xが画像の見た目で判断しているものと思っていました。調べてみると、画像ファイルにはメタデータ以外の情報が入ることがあり、その一つとしてC2PAがあることを知りました。
最近ではAIがつくったものか、人間がつくったものかを見分けることが難しいです。フェイクを見抜ける眼力を身に着けたいものですね。

参考
- X’s media literacy action plan
- Authenticity | X Help
- C2PA Tool
- Content provenance check | OpenAI API
ここまで読んでいただき、ありがとうございます。もしこの記事の技術や考え方に少しでも興味を持っていただけたら、ネクストのエンジニアと気軽に話してみませんか。
- 選考ではありません
- 履歴書不要
- 技術の話が中心
- 所要時間30分程度
- オンラインOK