6 Domanda: Verifica se un file è un file immagine

domanda creata a Tue, Jan 16, 2018 12:00 AM

Sto usando qualche file IO e voglio sapere se esiste un metodo per verificare se un file è un'immagine?

    
32
  1. 2012-03-10 01: 51: 14Z
6 risposte                              6                         

Questo funziona abbastanza bene per me. Spero di poterti aiutare

 
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");
    }
}
    
47
2012-03-15 13: 04: 37Z
  1. l'ho provato ma restituisce sempre "application /octet-stream
    2013-11-08 08: 49: 22Z
  2. hi @dermoritz Questo sembra essere un problema sul tuo sistema. Dai un'occhiata a questo post SO stackoverflow.com/questions/4855627/...
    2013-11-08 10: 08: 30Z
  3. Che ne dici se proviene dall'URL? Prima di salvare l'URL in un file? Ho ottenuto "application /octet-stream" al posto dell'immagine. Qualche idea?
    2015-02-23 20: 50: 29Z
  4. Questo controlla solo in base all'estensione del file. Le immagini non valide (altri binari senza contenuto di immagine e intestazioni di file corrette) non possono essere rilevate con questo metodo.
    2015-10-06 13: 00: 20Z
  5. Questo è un brutto modo per verificare se il file è un'immagine. una soluzione migliore è: Files.probeContentType (percorso);
    2016-02-18 11: 10: 32Z
 
if( ImageIO.read(*here your input stream*) == null)
    *IS NOT IMAGE*    

E c'è anche una risposta: Come verificare un file caricato se si tratta di un'immagine o di un altro file?

    
21
2017-05-23 12: 17: 50Z
  1. Questo è l'unico modo in cui posso trovare se un file è un file immagine (su un sistema Ubuntu con Java 8).
    2017-01-22 12: 55: 58Z

In Java 7, c'è metodo java.nio.file.Files.probeContentType () . Su Windows, questo utilizza l'estensione del file e il registro (non controlla il contenuto del file). È quindi possibile controllare la seconda parte del tipo MIME e verificare se è nelmodulo <X>/image.

    
12
2012-03-10 02: 37: 16Z
  1. funziona ma dovresti usare la prima parte "image /jpeg"
    2013-11-08 09: 03: 55Z
  2. Su Linux, sembra solo guardare l'estensione sulla mia macchina. Modificato un file .jpeg in .txt e restituito "text /plain". Mi piace la risposta di Krystian qui sotto.
    21-05-2011 21: 49: 16Z

Puoi provare qualcosa del genere:

 
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");
}
    
8
2016-06-09 05: 15: 37Z

Puoi provare qualcosa del genere:

 
   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
   }

dovrebbe funzionare, anche se non sembra essere la versione più elegante.

    
4
2012-03-10 02: 21: 15Z
  1. mi chiedo dove sia la differenza dalla mia soluzione
    2012-03-10 02: 30: 28Z
  2. scusa, quando ho scritto la mia risposta la tua non c'era ... forse mi ci è voluto troppo tempo per scriverlo. Ma hai ragione, è completamente lo stesso:)
    2012-03-10 03: 11: 24Z
  3. eheh, nessun problema. Penso che capita a tutti tutto il tempo qui. :)
    2012-03-10 03: 13: 56Z
  4. @ ismaelga - In effetti, accade così spesso che la maggior parte delle persone non si preoccupa nemmeno di commentarlo.
    2012-03-10 04: 25: 00Z
  5. @ StephenC - Sono una persona cattiva, lo so. Ho appena commentato a causa del divario di qualcosa come 30 minuti, ma so che è ancora una cosa normale. :) e non sono sarcastico
    2012-03-10 04: 36: 02Z

Ci sono molti modi per farlo; vedere altre risposte e i collegamenti alle domande correlate. (L'approccio Java 7 sembra il più interessante per me, perché utilizza le convenzioni specifiche della piattaforma per impostazione predefinita e puoi fornire il tuo schema per la determinazione del tipo di file.)

Tuttavia, vorrei solo sottolineare che nessun meccanismo è del tutto infallibile:

  • I metodi che si basano sul suffisso del file saranno ingannati se il suffisso è non standard o sbagliato.

  • I metodi che si basano su attributi di file (ad esempio nel file system) saranno ingannati se il file ha un attributo di tipo di contenuto non corretto o del tutto assente.

  • I metodi che si basano sull'osservazione della firma del file possono essere ingannati dai file binari che hanno lo stesso byte di firma.

  • Anche il semplice tentativo di leggere il file come immagine può essere ingannato se sei sfortunato ... a seconda del /dei formato /i di immagine che provi.

3
2019-04-16 07: 26: 52Z
fonte collocata Qui