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