web-dev-qa-db-ja.com

ファイルが画像ファイルかどうかをテストします

ファイルIOを使用していますが、ファイルが画像かどうかを確認する方法があるかどうかを知りたいですか?

32
lancegerday

これは私にはかなりうまくいきます。私が助けてくれることを願っています

import javax.activation.MimetypesFileTypeMap;
import Java.io.File;
class Untitled {
    public static void main(String[] args) {
        String filepath = "/the/file/path/image.jpg";
        File f = new File(filepath);
        String mimetype= new MimetypesFileTypeMap().getContentType(f);
        String type = mimetype.split("/")[0];
        if(type.equals("image"))
            System.out.println("It's an image");
        else 
            System.out.println("It's NOT an image");
    }
}
48
Ismael Abreu
if( ImageIO.read(*here your input stream*) == null)
    *IS NOT IMAGE*    

また、答えがあります: アップロードされたファイルが画像であるか他のファイルであるかを確認する方法

22
Krystian

Java 7では、 Java.nio.file.Files.probeContentType() メソッドがあります。Windowsでは、これはファイル拡張子とレジストリを使用します(ファイルの内容を調べないでください。その後、MIMEタイプの2番目の部分を確認し、形式が<X>/image

12
prunge

次のようなものを試すことができます:

String pathname="abc\xyz.png"
File file=new File(pathname);


String mimetype = Files.probeContentType(file.toPath());
//mimetype should be something like "image/png"

if (mimetype != null && mimetype.split("/")[0].equals("image")) {
    System.out.println("it is an image");
}
9

次のようなものを試すことができます:

   import javax.activation.MimetypesFileTypeMap;

   File myFile;

   String mimeType = new MimetypesFileTypeMap().getContentType( myFile ));
   // mimeType should now be something like "image/png"

   if(mimeType.substring(0,5).equalsIgnoreCase("image")){
         // its an image
   }

これは動作するはずですが、最もエレガントなバージョンではないようです。

4
GameDroids

これを行うにはさまざまな方法があります。他の回答と関連する質問へのリンクをご覧ください。 (Java 7のアプローチは、デフォルトでプラットフォーム固有の規則を使用し、ファイルタイプの決定に独自のスキームを提供できるため、私にとって最も魅力的だと思われます。)

ただし、完全に確実なメカニズムはないことを指摘したいと思います。

  • 接尾辞が非標準または間違っている場合、ファイルの接尾辞に依存するメソッドはだまされます。

  • ファイルに不適切なコンテンツタイプ属性があるか、まったくない場合、ファイル属性(ファイルシステムなど)に依存するメソッドはだまされます。

  • ファイルの署名を見ることに依存しているメソッドは、たまたま同じ署名バイトを持っているバイナリファイルによってだまされる可能性があります。

  • 不幸な場合は、単にファイルを画像として読み取ろうとしても、試行する画像形式によってはだまされる可能性があります。

3
Stephen C