Distinguer 2 photos sur base de leurs EXIFs

Résolu/Fermé
alex - 3 juin 2008 à 02:25
 Dom - 22 sept. 2008 à 13:36
Hello!

(Pour ceux qui n'ont pas envie de lire tout mon roman: rendez-vous immédiatement 5 paragraphe plus bas pour lire tout de suite ma question)

Je cherche à mettre de l'ordre dans les quelque 1.000.000 de photos qui squattent tout l'espace de mes disques durs.

Il faut savoir que parmi ces photos se trouve un très grand nombre de doublons.
Ceci est dû au fait que:
- certaines photos ont été copiées plusieurs fois de l'appareil photo (par 2 personnes différentes) sous des noms différents et à des emplacements différents, ou bien parce que
- certaines photos ont été redimensionnées voire retravaillées (recadrées, retouchées) et enregistrées sous un nouveau nom, ou encore (et surtout ) parce que
- un grand nombre de photos ont été récupérées d'un disque dur défectueux avec plusieurs programmes différents (pour mettre toutes les chances de son côté et récupérer un maximum de photos) c-à-d en plusieurs exemplaires et avec des noms insignifiants (p.ex "E5G7GSD65.jpg").

J'ai donc écrit un programme en PHP chargé de trier toutes ces photos en fonction de leur date de prise de vue dans des répertoires chronologiques (2008/06/... .jpg).

Or, le problème est que beaucoup de photos ont été prises à moins de 1 seconde de différence, aussi bien qu'on ne peut plus identifier une photo à sa seule date (date + heure + minutes + secondes):
par exemple 2 fichiers JPG dont la date de prise de vue indique 2008/06/03 02h16 05s ne sont pas forcément identiques vu que j'ai très bien pu prendre 2 (ou plus) photos en cette seconde ("grâce" au mode "rafale").

Enfin voici ma question:
Est-il possible, et si oui comment, de distinguer 2 photos (2 fichier JPG) rien que sur base de leurs données EXIF?
Ou bien faut-il comparer une à une toutes les photos prises à la même date?? (Mais alors bonjour le boulot!)

J'ai regardé du côté des infos EXIF du genre "exposition" ou "ouverture", etc. mais le problème est que 2 photos qui se suivent si rapidement ont toujours (?) les mêmes réglages!

N'existe-t-il pas de tag EXIF qui identifie une fois pour toute une photo ??? (ou bien tout autre méthode ???)

Merci d'avance!
Alex
A voir également:

6 réponses

Ca y est! J'ai enfin trouvé une solution à mon problème!

En fait, j'ai comparé les données EXIF de 2 photos différentes prises pendant la même seconde et je suis tombé sur Exif.SubSecTime. Cette métadonnée EXIF indique les centièmes de seconde de la date de prise de vue.

Ainsi, si je prends aujourd'hui 2 photos, l'une à 21h36, 03 secondes et 40 centièmes de seconde, l'autre à 21h36, 03 secondes et 70 centièmes de seconde, le tag DateTimeOriginal des 2 photos donne "03/06/2008 21:36:03" alors que le tag SubSecTime donne "40" pour la première et "70" pour la deuxième.

Et voilà! C'est aussi simple que ça.
J'espère que cela pourra être utile à d'autres.
Il ne me reste plus qu'à intégrer cela dans mon programme et à passer toutes mes photos au crible.

Alex
1
Bonjour,

Je viens de lire votre question, puis juste après, la solution que vous semblez avoir trouvée.
Pouvez vous m'en dire un peu plus, je travaille pour différents studios de photos, j'ai urgemment besoin de différentier des centaines de photos sur leur date et heure de prise de vue.
Je pensais avoir trouvé, mais j'ai un raté avec une grande série de photos.
Merci d'avance pour votre réponse.
0
Hello!

Désolé de ne te répondre que maintenant, hebus, mais j'étais un peu occupé ces derniers temps :)
Si ce que tu cherches est simplement de récupérer les centièmes de secondes d'une photo, tu peux utiliser le code suivant:

<?php

	//On récupère les données exif qu'on stocke dans $exifs sous forme de 
	//tableau associatif
	$exifs=exif_read_data($fichier, 0, true);

	//Les centièmes de seconde sont situées dans $exifs['EXIF']['SubSecTime']...
	//...mais comme tous les appareils photos n'enregistrent pas les centièmes 
	//de seconde, il faut vérifier si la photo contient l'information SubSecTime 
	//ou non
	if(isset($exifs['EXIF']['SubSecTime']))
		{
		$centi=$exifs['EXIF']['SubSecTime'];
		}
	else
		{
		//Si la photo ne contient pas d'information sur les centièmes de 
		//seconde, on dit simplement que les centièmes de seconde 
		//valent 0
		$centi=0;
		}

	//Enfin, on peut par exemple afficher le résultat
	echo $centi;

?>


SI par contre, tu aimerais comme moi classer tes photos à l'aide de PHP, c'est une autre affaire.
Dans ce cas, dis-le-moi et je verrais si je peux t'aider (parce que j'y travaille depuis assez longtemps et l'ensemble de scripts est assez complexe).

A+
alex
1
Ah j'oubliais!
L'heure de prise de vue est stockée dans $exifs['EXIF']['DateTimeOriginal'] !
1
docsteph Messages postés 8763 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 28 septembre 2024 1 115
3 juin 2008 à 03:39
bonsoir,

je croit que t pas rendu.

un ordi c'est comme chez soi, quand ya trop de bordel faut ranger lol.

a l'avenir faudra changer l'organisation de travai, quand au soft qui pourrait t'aider dans l'avenir, je regarde.

cdtl
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Salut ! bien content que tu ais trouvé la solution a ton problème ! ^^
come j'ai besoin d'un bout de code qui ferais la même chose que le tien, et en php en plus ! et que je suis un peu flemard ... Je me demandais qqu chose, tu pourrais mettre ton script à disposition ?
0
hello
l'heure de prise de vue pourrait être utile.
regarde les informations EXIF avec Konvertor, il affiche toutes les données connues (ctrl + F12 pour avoir la fenêtre des propriétés exif à l'écran)
0