Changer les dates d une série d'image

FoxLeRenard Messages postés 68 Date d'inscription samedi 2 juillet 2005 Statut Membre Dernière intervention 8 novembre 2024 - Modifié le 4 oct. 2024 à 12:38
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 - 4 oct. 2024 à 20:38

Bonjour,

Je sais faire un PHP qui marche très bien pour changer "la date modifiée le"

<?php
$directory = 'C:/mesdocum/EasyPHP-5.3.2/www/exifimg'; 
function modifyImageDate($file, $newDate) {
    if (exif_imagetype($file) == IMAGETYPE_JPEG) {
        // Modifie la date de modification du fichier système
        touch($file, strtotime($newDate));
        $command = "exiftool -DateTimeOriginal=\"$newDate\" -overwrite_original \"$file\"";
        shell_exec($command);
        echo "Date modifiée pour : $file\n";
    }
}
$newDate = '2022-01-01 12:00:00'; 

if ($handle = opendir($directory)) {
    while (false !== ($file = readdir($handle))) {
        $filePath = $directory . '/' . $file;
        if (is_file($filePath)) {
            modifyImageDate($filePath, $newDate);
        }
    }
    closedir($handle);
} else {
    echo "Impossible d'ouvrir le répertoire.\n";
}
?>

Mais comment procéder pour changer "la date de prise de vue" car mes anciennes diapos ont été scannées, et je voudrais corriger cette date.

Merci d'avance
Windows / Chrome 129.0.0.0


A voir également:

3 réponses

jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 718
Modifié le 4 oct. 2024 à 12:39

Bonjour 

Ta question ne concerne pas le PHP, mais exiftool en ligne de commande.

exiftool -P -overwrite_original "-AllDates<Filename" "-FileCreateDate<Filename" "-FileModifyDate<Filename"  Y:\!temp\bbbb\img-20151204-wa0002.jpg

0
FoxLeRenard Messages postés 68 Date d'inscription samedi 2 juillet 2005 Statut Membre Dernière intervention 8 novembre 2024 2
Modifié le 4 oct. 2024 à 12:40

Merci de ta réponse.

Je connais ExifTool mais il faut aller sur la ligne de commande et Exiftool que des paramètres soient présents et sur 2.000 photos mon PHP peut faire l'un pourquoi, pas l'autre. Tu es programmeur, alors la force avec PHP en local, c'est de pouvoir mettre la date qui lui correspond en fonction du nom d'image, tu vois l'avantage ;-)
Merci de m'avoir lu et bon week-end à venir ...


0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557
4 oct. 2024 à 06:31

bonjour,

Afin de pouvoir faire cela en PHP, il faut savoir comment ExifTool permet de faire cela en ligne de commande.

Sais-tu comment ExifTool permet de faire cela en ligne de commande?

1
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 718
Modifié le 4 oct. 2024 à 12:45

.... regarde les lignes 7 et 8 de ton code......

1
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557 > jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024
4 oct. 2024 à 14:31

La ligne de commande ExifTool change "la date de prise de vue"?

Si oui, je ferais un echo de $command, ce qui permet de tester cette commande dans une boîte de commande.

0
FoxLeRenard Messages postés 68 Date d'inscription samedi 2 juillet 2005 Statut Membre Dernière intervention 8 novembre 2024 2 > yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024
Modifié le 7 oct. 2024 à 11:02

Pour être plus précis, je te remets après changement et t'explique ce que cela donne (en PHP) local donc sur mon Windows 11 :

Avec ce code PHP:

<?php
$directory = 'C:/mesdocum/EasyPHP-5.3.2/www/exifimg'; 
function modifyImageDate($file, $newDate) {
     touch($file, strtotime($newDate));
    if (exif_imagetype($file) == IMAGETYPE_JPEG) {
        $command = "exiftool -DateTimeOriginal=\"$newDate\" -CreateDate=\"$newDate\" -FileCreateDate=\"$newDate\" -overwrite_original \"$file\"";
        shell_exec($command);

        echo "Date de création et de modification modifiées pour : $file\n";
    }
}

$newDate = '2021-01-01 12:00:00'; 

if ($handle = opendir($directory)) {
    while (false !== ($file = readdir($handle))) {
        $filePath = $directory . '/' . $file;
        if (is_file($filePath)) {
            modifyImageDate($filePath, $newDate);
        }
    }
    closedir($handle);
} else {
    echo "Impossible d'ouvrir le répertoire.\n";
}
?>

Voila le plus précisément où j'en suis, ça progresse. Je n'ai aucun message d'erreur. Le résultat incohérent à mon sens :

  • la date de prise de vue est aujourd'hui ! Elle est bien changée mais ça n'est pas la date du script
  • la date de "Modifié le" est celle indiquée dans le script  ! OK

Modération : réécriture partielle du message + mise en forme du code (merci d'utiliser PHP au lieu d'HTML)

0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557 > FoxLeRenard Messages postés 68 Date d'inscription samedi 2 juillet 2005 Statut Membre Dernière intervention 8 novembre 2024
4 oct. 2024 à 16:24

Le résultat te semble incohérent.

Pourquoi?

Est-ce parce que la date de prise de vue est la date d'aujourd'hui et pas '2021-01-01 12:00:00'?

C'est toujours mieux d'être explicite.

Moi, je ferais un echo de $command, ce qui permet de tester cette commande dans une boîte de commande.

0
FoxLeRenard Messages postés 68 Date d'inscription samedi 2 juillet 2005 Statut Membre Dernière intervention 8 novembre 2024 2
4 oct. 2024 à 16:30

Oui c'est ce que j'ai écrit j'aurais voulu  que les deux dates deviennent identiques et fixée par moi ! 
A+FoxLeRenard

0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557
4 oct. 2024 à 20:38

Moi, je ferais un echo de $command, ce qui permet de tester cette commande dans une boîte de commande.

1