ファイルが画像ファイルであるかどうかを確実に判断するにはどうすればよいですか?

ファイルが画像ファイルであるかどうかを確実に判断するにはどうすればよいですか?

現在、次のコマンドを使用しています:

file image.jpg | cut -d " " -f 2

ここまでは順調です。画像拡張子のないファイルでも動作します。それで、これを行う別の方法があるかどうか疑問に思いました。上記のコードが失敗する特定のケースを見たことがないかもしれません。

編集: ディレクトリ内の画像ファイルの名前を順番に変更するスクリプトを作成しようとしています。

答え1

ImageMagick プロジェクトには画像を識別する機能があります。

私は、コマンドラインからの「識別」機能を含め、ImageMagick を常に使用していますが、画像の識別に一度も失敗したことはありません。

フォーマットだけでなく、さらに多くの情報が提供されていることに注意してください。たとえば、次のようになります。

$  identify tmp3.jpg 
tmp3.jpg JPEG 1680x1050 1680x1050+0+0 DirectClass 8-bit 293.582kb 

$  identify tmp.png
tmp.png PNG 1012x900 1012x900+0+0 DirectClass 8-bit 475.119kb

答え2

file、ファイルの種類を識別するための信頼性の高い方法です。ファイル拡張子ではなく、ファイル コンテンツの先頭にある「マジック ナンバー」に依存します。

プロセスをより堅牢にするには、 をlibmagic直接使用できます。 こうすることで、何らかの理由で の出力形式がfile変更されても、影響を受けません。 ただし、これは、C ライブラリの関数を呼び出すことができる言語でスクリプトを作成する必要があることを意味します。

答え3

すでに正しいコマンドを取得しています。これは、MIMEタイプを で評価するだけですlibmagic。その唯一の目的は、ファイルタイプパターンそれぞれのファイル形式. これ以上のものは見つからないでしょう。正しく認識されないファイルに独自の拡張子を追加することもできます。(magick に対して、コマンド ファイルに対してではありません)

関連情報