批量修改照片文件名日期排序

发表日期:2022-08-05 23:15:29 | 来源: | | 浏览(833) 分类:PHP杂项

前言:为什么要写这个小工具?因为换过几台手机及电脑,十年里照片无数,大多照片拍摄时文件名就是日期,但是还有很多照片是微信QQ等同步到电脑上的,文件名已经是随机的了,话说为什么要修改照片文件名为日期的统一格式呢?

因为很多照片早已不知道是哪年哪天拍摄的。我想要让文件夹里按照日期时间来排序照片,这样我就可以清晰的看到这些年的时光,拼凑起凌乱的记忆。

‎2022‎年‎5‎月‎9‎日,‏‎2:50:10 半夜写完了这个类,把数千张存档的照片基本排序好了。

思路是读照片的创建时间&修改时间&拍摄时间,然后比较取最早的。文件名和md5读到数组里取最早的那个相同文件去重。生成文件名为img_20150816_131130.jpg 这种格式的文件

用法:把照片全部放在一个文件夹,把这个php文件命名为1.php也放在照片目录,然后命令行执行 : php 1.php

注意点是,请做好照片备份,代码里有许多if(true),if(false)是写的时候用的零时开关,自己理解吧,这个是临时起意写的demo,抽空我写成类工整一点。

<?php

$dir = "D:\个人收藏\照片备份 - 副本\\";

$md5 = [];
$i = 0;
if ($handle = opendir($dir)) {
    while (($file = readdir($handle)) !== false) {

        if (!in_array($file, ['.', '..', ['1.php']]) && !is_dir($file)) {
            if ($file === '1.php') continue;

            if (!file_exists($file)) {
                var_dump($file);
            } else {

                if (false) {//是否转小写文件名
                    rename($file, strtolower($file));
                }

                if (true) {//程序主体
                    ++$i;

                    $index = str_pad($i, 3, "0", STR_PAD_LEFT);

                    $filectime = filectime($file);
                    $filemtime = filemtime($file);
                    $time = $filemtime < $filectime ? $filemtime : $filectime;
                    $EXTENSION = pathinfo($file, PATHINFO_EXTENSION);

                    @$exif_data = exif_read_data($file);

                    if (!empty($exif_data['DateTime'])) {
                        $exif_date = $exif_data['DateTime'];
                        $fileptime = strtotime($exif_date);
                        $time = $time < $fileptime ? $time : $fileptime;
                    }
                    // DateTimeDigitized

                    if (!empty($exif_data['DateTimeOriginal'])) {
                        $exif_date = $exif_data['DateTimeOriginal'];

                        $fileptime = strtotime($exif_date);
                        if ($fileptime == false) {
                            var_dump($file . "\t" . $exif_date . "\t" . $fileptime);

                        } else {
                            $time = $time < $fileptime ? $time : $fileptime;
                        }

                    }

//                    exit();
//                $filectime = date('Y-m-d H:i:s',$filectime);
//                $filemtime = date('Y-m-d H:i:s',$filemtime);
//                $time = date('Y-m-d H:i:s',$time);
//                var_dump( "$file    创建时间:$filectime     修改时间:$filemtime    取时间:$time" );

//                img_20150816_131130.jpg
                    $newfile = "IMG_" . date('Ymd_His', $time) . "." . $EXTENSION;

                    if (file_exists($newfile)) {
                        $newfile = "IMG_" . date('Ymd_His', $time) . "_" . $index . "." . $EXTENSION;
                    }
                    rename($file, $newfile);
//                    var_dump($newfile);
                }

                if (false) {//是否去重复
                    $file_md5 = md5_file($file);
                    if (isset($md5[$file_md5])) {
                        $repeat = $md5[$file_md5];

                        var_dump("$repeat   ->  $file");

                        $repeat_filectime = filectime($repeat);
                        $repeat_filemtime = filemtime($repeat);
                        $repeat_time = $repeat_filemtime < $repeat_filectime ? $repeat_filemtime : $repeat_filectime;


                        $filectime = filectime($file);
                        $filemtime = filemtime($file);
                        $time = $filemtime < $filectime ? $filemtime : $filectime;

                        if ($time <= $repeat_time) {
                            unlink($repeat);
                            $md5[$file_md5] = $file;
                        } else {
                            unlink($file);
                        }

                    } else {
                        $md5[$file_md5] = $file;
                    }
                }

                if (false) {//是否把照片归类到每天一个文件夹(事实发现同一天拍摄的照片大多是同一类)
                    $filectime = filectime($file);
                    $filemtime = filemtime($file);
                    $time = $filemtime < $filectime ? $filemtime : $filectime;

                    $_dir = date('Y-m-d', $time);

                    @mkdir($_dir);
                    if (!file_exists($_dir . '\\' . $file)) {
                        copy($file, $_dir . '\\' . $file);
                    }
                }
            }

        }
    }
    closedir($handle);
}


?>

效果:

image.png

集速网 copyRight © 2015-2022 宁ICP备15000399号-1 宁公网安备 64010402001209号
与其临渊羡鱼,不如退而结网
欢迎转载、分享、引用、推荐、收藏。