JPEG メタデータについて (バイナリを 眺 めながら) 2015/10/16(Fri) yoya@awm.jp
自 己 紹 介 プロフィール (h;ps://osdn.jp/users/yoya/) Flash 動 的 生 成 を 頑 張 ってたけど 今 は 下 火 h;ps://osdn.jp/projects/swfed/ 最 近 は ImageMagick の 動 向 を 追 ってます h;p://labs.gree.jp/blog/2013/12/9290/ JavaScript 少 し 分 かります h;p://app.awm.jp/wafrag/debug.html h;p://app.awm.jp/windchime/windchime.html
今 日 のお 話 (バイナリという 言 葉 を 知 ってる 前 提 で) hexdump がお 友 達 0xED(Mac)や SQrling (Win) も JPEG のメタデータについて プライバシーへの 影 響 (こっちは 余 談 ) 撮 影 日 時 と 場 所 サムネールにも 注 意 表 示 への 影 響 こちらが 本 題 Exif OrientaQon ICC Profile
画 像 ファイルは 大 抵 メタデータを 持 つ 画 像 データ(RGB)だけでは 足 りない 作 成 日 付 ( 秒 単 位 で) 場 所 (GPSで 計 測 した 緯 度 経 度 ) カメラの 機 種 や 撮 影 条 件 ( 露 光 とか) サムネール 画 像 JPEG の 場 合 主 に Exif 規 格 に 従 う > APP1 それと 別 に profile を 持 てる > APP2 画 像 データはココ SOI APP0 APP1 APP2 DQT SOF0 DHT SOS (+RST) EOI
JPEG と Exif とプライバシー JPEGファイ ルは Exif と いう 形 式 で 画 像 以 外 の 情 報 を 付 加 できます h;p://www.rysys.co.jp/exifreader/jp/
JPEG で 位 置 バレ N35.XX.XX, E139.XX.XX (dms(60 進 )>degree 変 換 ) => 35.XXXXXX, 139.XXXXXX イメージです ( 実 際 の 場 所 から 変 えてます)
JPEG で 顔 バレ 編 集 して 保 存 した 時 に サムネールだけ 前 の ままになる 事 がある paint.exe で 顔 を 削 ったけど サムネを 抽 出 すると
JPEG って 危 険? ImageMagick で 対 処 できる? convert strip Meta.jpg Output.jpg あれれ?
正 解 はこっち convert. Meta.jpg auto- orient profile srgb.icc strip Output.jpg -auto- orient 向 きを 補 正 する - profile srgb.icc 色 を 補 正 する これらについて 詳 しく 説 明
メタデータの 中 身 を 知 る メタデータを 無 視 するビューアがいる (スマー トフォンは 色 補 正 を 完 全 無 視 ) メタデータもそこそこサイズあるしプライバ シーが 危 ないので 削 りたいけど 単 に 削 ると 表 示 が 変 わる
メタデータの 表 示 への 影 響 JPEG は 画 像 データ(YCbCr, RGB)をメタデータ で 補 正 して 表 示 する 必 要 あり ( 無 視 するビューアもある) 主 に 以 下 の 2つ OrientaQon ( 表 示 の 向 き) ICC Profile ( 色 補 正 ) 撮 影 した 時 の カメラの 向 き メーカーや 機 器 によって 色 の 定 義 が 違 う ricoh- imaging.co.jp ガンマ 値 が 違 う 基 準 とする 照 明 が 違 う 等 々
実 例 開 始 JPEG チャンク 構 造 サムネが 入 るかも 縦 横 サイズ 量 子 化 表 等 ハフマン 表 ( 圧 縮 された) 画 像 データ YCbCr 終 了 SOI APP0 DQT SOF0 DHT SOS (+RST) EOI Marker only SOI SOI (marker) ff d8 Marker + Length + Payload JFIF(4a,46,49,46) APP0 APP0 (marker) ff e8 (length) 00 10 (marker) 4a 46 49 46 0x10 が 長 さフィールド を 含 む 事 に 注 意 0x10=16 16-2=14
JPEGバイナリを 見 てみよう SOI( 開 始 ),EOI( 終 了 )はタグだけ それ 以 外 はタグ+データ 長 +データ データ 長 の 数 値 はビッグエンディアン はデータ 長 フィールド 分 も 含 む SOI ffd8 APP0 ffe0 0010... 0x10 byte APP1 ffe1 0062. 0x62 byte
JPEG 構 造 JPEG バイナリフォーマット (チャンク 構 造 ) 最 小 構 成 ( 実 画 像 データのみ) SOI APP0 DQT SOF0 DHT SOS (+RST) EOI メタデータ 付 き SOI APP0 APP1 APP2 DQT SOF0 DHT SOS (+RST) EOI Exif:OrientaQon Profile:icc Exif は GPSInfo や 撮 影 日 時 カメラの 型 番 露 光 設 定 etc 組 み 合 わせると 個 人 情 報 になりそうなデータも 入 る
Exif:OrientaQon とは? APP1 chunk の Exif:OrientaQon で 撮 影 した 時 の 向 きを 指 定 できる SOI APP0 APP1 APP2 DQT SOF0 DHT SOS (+RST) EOI 横 向 きで 撮 影 した 場 合 に 映 ったまま 記 録 するけど 表 示 する 時 に 向 きを 補 正 Exif: OrientaQon = 6( 右 回 し)
Exif OrientaQon の 操 作 eximool が 便 利 OrientaQon=6 を 設 定 $ eximool - OrientaQon=6 - n OrientaQonTest- right- top.jpg 1 image files updated $
JPEGバイナリを 見 てみよう (Exif) Exif: OrientaQon = 6 SOI ffd8 APP0 ffe0 APP1 ffe1 tag:0012 = OrientaQon Motorola BigEndian タグ 数 ffe1 0062 Exif MM 0005 0112 0003 00000001 0006 0000 type:ushort count:1 offset or value:6
Exif の 回 転 補 正 Exif OrientaQon に 応 じて 画 像 を 回 転 してくれ る $ convert Rotate6.jpg auto- orient RotateNone.jpg
Profile:icc とは? APP2 の ICC プロファイルで 色 調 補 正 SOI APP0 APP1 APP2 DQT SOF0 DHT SOS (+RST) EOI 色 が 変 わる! (ここまで 極 端 な 事 はなくて 通 常 は 明 暗 や 彩 度 が 変 わる 程 度 ) Profile: icc
ICC プロファイルうんちく カラーマネジメントの 規 格 www.icc.org デバイス 毎 に( 主 にセンサーやライトの 物 理 特 性 の 都 合 で) R,G,B と 実 際 の 色 の 対 応 が 異 なるので それを 吸 収 モニタで 確 認 した 色 と 印 刷 した 色 が 機 種 によって 違 うのは 困 る
ICC プロファイルの 色 変 換 カラーマネジメントの 規 格 デバイス 間 の 全 変 換 テーブルをメッシュで 持 たず 共 通 の 色 空 間 を 定 義 して そこ(PCS)との 変 換 テーブルだけ 持 てば 相 互 接 続 できる h;p://www.adobe.com/jp/support/techguides/color/ colormodels/ciexyz.html
デジカメのセンサーや モニタの 発 色 が 人 間 の 視 覚 の 限 界 にどこまで 近 づけるか 一 般 に 普 及 している モニタは srgb なので Web の 画 像 はこれに 合 わせてる ( 狭 い) 色 域 (Gamut)
JPEGバイナリを 見 てみよう (ICC) SOI ffd8 APP0 ffe0 APP2 ffe2 Profile:ICC_PROFILE ffe2 0c58 ICC_PROFILE. 00000214 ADBE 0210 0000 mntr Profile:icc Size 0x214 Type: Adobe Version 2.1 ディスプレイ 出 力
ICC Profile の 抽 出 抽 出 方 法 が 見 つからないので 自 作 h;ps://github.com/yoya/misc/blob/master/go/ imagick_profiles.go (Go から ImageMagick を 呼 ぶ) $ go build imagick_profiles.go $ $ imagick_profiles GBR.jpg [app12 icc] $ imagick_profiles GBR.jpg icc > GBR.icc
ICC Profile の 設 定 ImageMagick の convert で 可 能 (MacOS で homebrew だと 動 かない ports だと OK) $ convert RGB.jpg - profile GBR.icc GBR.jpg 注 意 変 換 元 JPEG の icc プロファイル 有 無 で 動 作 が 変 わる ない 場 合 単 純 に icc プロファイルを 挿 入 するだけ あった 場 合 既 に 入 っていた icc の 色 空 間 かsら 新 しく 指 定 した icc の 色 空 間 に 変 換 ( 補 正 )する
自 分 で 色 補 正 をやりたい ImageMagick だと 遅 い 以 下 の2つのツールが 有 名 Li;le- CMS h;p://www.li;lecms.com/ QCMS h;ps://people.mozilla.org/~jmuizelaar/qcms.git/ h;p://rockridge.hatenablog.com/entry/ 20090606/1244265122
Li;le- CMS ImageMagick の カラマネ 色 空 間 補 正 は 実 は Li;le- CMS を 使 ってるだけ 使 い 方 超 簡 単
QCMS Li;le- CMS が 重 たいので QCMS を 作 った FireFox のエンジニアさんが 作 った 凄 い Chrome もこれを 使 っているっぽい 問 題 ICC v2 のみ 対 応 (v4 未 対 応 ) RGB 以 外 の 色 空 間 も 微 妙 ( 多 分 Webに 特 化 ) Safari は QCMS でなく ColorSync を 使 う
まとめ JPEG のメタデータに 注 意 プライバシー 情 報 が 入 る 事 がある 単 純 に 削 ると 表 示 が 乱 れる 回 転 するかも 色 味 が 変 わるかも Imagemagick 使 うと 対 処 が 簡 単! 高 速 化 したい 場 合 は LCMS や QCMS を 利 用 して 自 前 で 頑 張 る
次 回 予 告 ピクセルの 座 標 系 について グリッドの 取 り 方 (ラスターとベクターで 違 う 事 が 多 い) 色 の 基 本 量 子 化 A- D 変 換 RGB, CMYK, HSL, YCbCr, CIE XYZ 等 々 ( 虚 色 とは?) 減 色 均 等 法 中 央 値 頻 度 法 頻 度 均 等 化 法 etc 補 間 アルゴリズム ( 賢 いリサイズを) NearestNeighbor, Bilinear, Cubic, etc
質 問 ください お わ り
質 問 まとめ PNG にも ICC が 入 る 事 があるの? 入 れる 方 法 はあるけど 自 分 は 見 た 事 がない h;p://www.libpng.org/pub/png/spec/1.2/png- Chunks.html#C.iCCP 印 刷 で 色 がくすむけど 良 い 方 法 は? 色 域 外 警 告 (YMCK で 表 現 できない 領 域 ) h;p://psgips.blog24.fc2.com/blog- entry- 406.html 印 刷 の 色 域 を 広 げる ( 高 演 色 インク) h;p://www.atomi.co.jp/h- uv/ink/index.html 顔 料 やライトインクのマニアックな 話 は 次 回 にでも
以 上