lundi 18 mars 2013

[Java] - Données EXIF


Il n'y a pas d'implémentation native des données EXIF en java (ou alors je ne la connais pas)

Je vais donc utiliser une librairie que j'ai déjà utilisé auparavant et qui m'a donné satisfaction : metadata-extractor

Je ne vais pas expliquer ici comment ajouter une librairie au build path mais vous trouvez cela sur l'ensemble des tutos débutants.

1ere Etape lecture des données EXIF

public void getImageNameFromExif(String imagePath) {
 
  //on récupère le metadata reader.
  File jpegFile = new File(imagePath);
  try {
   Metadata metadata = JpegMetadataReader.readMetadata(jpegFile);
   
   //On récupère le 'dossier exif' 
   ExifSubIFDDirectory directory = metadata.getDirectory(ExifSubIFDDirectory.class);
   
   //On récupère la date originale de prise de vue
   Date date = directory.getDate(ExifSubIFDDirectory.TAG_DATETIME_ORIGINAL);
   
   if (date == null) {
    System.out.println("no date");
   }
   
   //On formatte la date
   SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd/yyyyMMdd_hhmmss");
   
   //On créé le fichier cible.
   File targetPath = new File(this.baseTarget + "/" 
     + 
     sdf.format(date)
     + ".jpg");
   
   System.out.println(targetPath.getAbsolutePath());
   
   
  } catch (ImageProcessingException e) {
   //e.printStackTrace();
   System.out.println("1 : " + e.getMessage());
  } catch (IOException e) {
   System.out.println("2 : " + e.getMessage());
  }
  
 }
L’exécution de cette méthode avec le code suivant :

fs.getImageNameFromExif("C:\\Users\\Reno\\Pictures\\2010-05-08\\IMG_0059.JPG");
retourne la valeur suivante :

C:\dev\export\2010\04\08\20100408_110249.jpg

Nous étions ici dans le cas parfait.

Essayons avec un fichier non jpeg (un simple fichier texte renommé jpg par exemple)

L'exception ImageProcessingException est levée avec le message "not a jpeg file"
Ce cas là est simple à gérer : Il suffit de ne rien faire. Ce sera la même chose si le fichier n'existe pas.

Maintenant essayons un fichier Jpeg qu'il n'a pas de données EXIF.
Dans ce cas la date sera null et nous aurons un nullPointerException. Dans ce cas il faudra récupérer les données autrement.


Aucun commentaire:

Enregistrer un commentaire