Changer les dates d une série d'image

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+FoxLeRenard

3 réponses

  1. Modérateur

    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
    

    1. 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 ...


      1. Contributeur

        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?

      2. Modérateur

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

      3. Contributeur
        @jordane45

        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.

      4. @yg_be

        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)

      5. Contributeur
        @FoxLeRenard

        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.

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

      1. Contributeur

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