Edited at

拡張子を偽るPNGファイルを見破るfileコマンド

世の中には拡張子を変更すれば中身も変わると思っている人がいるらしく、

.pngなのに中身はjpegファイルだったり、.jpgなのに中身はpngファイルだったりってファイルによく遭遇する。

画像まわりで処理が何故かエラーになったり、挙動がおかしくなったりするのは6割方これのせい。


偽の image.png ファイルを調べる

image.jpg というjpegファイルから、ファイル名変更で拡張子だけを変更した image.pngfile コマンドで実行するだけ

$ file /tmp/image.png

/tmp/image.png: JPEG image data, JFIF standard 1.02, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 500x500, frames 3

JPEG image data と表示される


本物のPNGファイルだとこんな表示

$ file /tmp/image.png

/tmp/image.png: PNG image data, 500 x 500, 8-bit/color RGBA, non-interlaced

ピクセル数、何bitなど他の情報も取得できる


fileコマンドは画像ファイル以外にも使える

$ file /tmp/image.psd

/tmp/image.psd: Adobe Photoshop Image, 500 x 500, RGB, 3x 8-bit channels

$ file /tmp/image.zip

image.zip: Zip archive data, at least v2.0 to extract

軽い情報はここから読み取れるので、CUIで操作してるとき多少便利かも