2012-02-11 14 views

答えて

2

これを行うのに役立つ外部ツールがあります。 JMimeMagicJMagickをチェックしてください。 ImageIOクラスを使用してファイルを読み込もうとすることもできますが、これは高価になる可能性があり、完全に安全ではありません。

BufferedImage image = ImageIO.read(new FileInputStream(new File(..._))); 

この質問は何回SOに頼まれました。

Check if a file is an image

How to check a uploaded file whether it is a image or other file?

+0

このコードセグメントを試してください:同じトピック上のこれらの追加のスレッドが参照してください。画像のチェックが行われます。 ** OutOfMemoryError ** –

+0

これは複数のファイルの場合には良いアプローチではありません。 –

11
public static boolean isImage(File file) { 
    if (file == null || !file.exists()) { 
     return false; 
    } 
    BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inJustDecodeBounds = true; 
    BitmapFactory.decodeFile(file.getPath(), options); 
    return options.outWidth != -1 && options.outHeight != -1; 
} 
+0

これはどのように動作するのですか? – Micro

+0

@MicroR、 'options.inJustDecodeBounds = true;'を設定した場合、 'BitmapFactory'は画像全体のデータをデコードせず、画像のメタデータのみをデコードします。 fileが 'BitmapFactory'よりも有効なイメージであれば、メタデータを解析し、' options.outWidth'と 'options.outHeight'を埋めます。これらのフィールドには、画像の幅と高さが含まれます。復号化エラーが発生した場合、フィールドには-1が含まれます。 docs http://developer.android.com/intl/ru/reference/android/graphics/BitmapFactory.Options.html#outWidthを参照してください。 – danik

0

メモリと多くの面で*これは*非常に非常に悪いです

public static boolean isViewableImage(String name) { 
    String suffix = name.substring(name.lastIndexOf('.') + 1).toLowerCase(); 
    if (suffix.length() == 0) 
     return false; 
    if (suffix.equals("svg")) 
     // don't support svg preview 
     return false; 

    String mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension(suffix); 
    if (mime == null) 
     return false; 
    return mime.contains("image"); 
} 
関連する問題