用PHP整理照片和视频文件

孤街浪徒 提交于 2020-01-08 13:32:35

  这个年代,谁要没有几张照片都对不起自己。从有相机到照的第一张照片起,留下了太多美好的记忆,记忆已成过往,回忆却希望永恒。奈何这些年照片太多,粗略看了下,将近70G,从这些个照片里找些回忆,翻找起来太麻烦,作为一个农场主的“老农民”,必须得想个办法整理下。梳理了自己的问题和需求如下:

 

 

 

花了2小时,整理了一段小代码,不到3分钟所有的照片和视频就规规矩矩,服服帖帖了。代码如下:

<?php/** * 相册大翻转 * @param $process_dir 要处理的文件夹 * @param $tidy_dir 目标文件夹 * * @return bool */function read_all($process_dir,$tidy_dir){    $i=0;    if(!is_dir($process_dir)) return false;//如果传过要处理的不是文件夹,则直接返回false    $handle = opendir($process_dir);    if ($handle) {        while (($fl = readdir($handle)) !== false) {            $temp = $process_dir . DIRECTORY_SEPARATOR . $fl;            if (is_dir($temp) && $fl != '.' && $fl != '..') {                read_all($temp,$tidy_dir);            }            else{                if ($fl != '.' && $fl != '..') {                     if(strtolower(substr(strrchr($temp, '.'), 1))=='jpg' || strtolower(substr(strrchr($temp, '.'), 1))=='jpeg'){                         $exif_info=getExif($temp);                         if($exif_info)                         {                             if(array_key_exists('EXIF',$exif_info) && array_key_exists('DateTimeOriginal',$exif_info['EXIF']))                             {                                 $file_exif_date=$exif_info['EXIF']['DateTimeOriginal'];                             }                             elseif(array_key_exists('IFD0',$exif_info) && array_key_exists('DateTime',$exif_info['IFD0']))                             {                                 $file_exif_date=$exif_info['IFD0']['DateTime'];                             }                             elseif(array_key_exists('FILE',$exif_info) && array_key_exists('FileDateTime',$exif_info['FILE']))                             {                                 $file_exif_date=date('Y-m-d H:i:s',$exif_info['FILE']['FileDateTime']);                             }                             else                             {                                 $file_exif_date='';                             }                         }                         else                         {                             if(is_file($temp))                             {                                 $file_date=filemtime($temp);                                 $file_exif_date=date('Y-m-d H:i:s',$file_date);                             }                         }                         $file_dir=empty($file_exif_date)?'temp':date('Y',strtotime($file_exif_date)).DIRECTORY_SEPARATOR.date('m',strtotime($file_exif_date));                         $file_dir=$tidy_dir.DIRECTORY_SEPARATOR.$file_dir;                         $file_name=empty($file_exif_date)?md5($fl):date('Ymd@His',strtotime($file_exif_date));                         $file_full_name=$file_name.'.'.substr(strrchr($temp, '.'), 1);                         $dest_file=$file_dir.DIRECTORY_SEPARATOR.$file_full_name;                         $sour_size=filesize($temp);                         if(file_exists($dest_file))                         {                             $dest_size=filesize($dest_file);                             if($sour_size==$dest_size)                             {                                 unlink($temp);                                 continue;                             }                             else                             {                                 $i++;                                 $file_full_name=$file_name.'_'.$sour_size.'.'.substr(strrchr($temp, '.'), 1);                             }                         }                         echo $dest_file."<br>";                         create_folders($file_dir);                         rename($temp,$file_dir.DIRECTORY_SEPARATOR.$file_full_name);                        }                        else                        {                            if(is_file($temp))                            {                                $fiel_type=strtolower(substr(strrchr($temp, '.'), 1));                                $file_exif_date=filemtime($temp);                                $file_dir=empty($file_exif_date)?'temp':date('Y',$file_exif_date).DIRECTORY_SEPARATOR.date('m',$file_exif_date);                                $file_dir=$tidy_dir.DIRECTORY_SEPARATOR.'video'.DIRECTORY_SEPARATOR.$fiel_type.DIRECTORY_SEPARATOR.$file_dir;                                $file_name=empty($file_exif_date)?md5($fl):date('Ymd@His',$file_exif_date);                                $file_full_name=$file_name.'.'.substr(strrchr($temp, '.'), 1);                                $dest_file=$file_dir.DIRECTORY_SEPARATOR.$file_full_name;                                $sour_size=filesize($temp);                                if(file_exists($dest_file))                                {                                    $dest_size=filesize($dest_file);                                    $file_exif_date_dest=filemtime($dest_file);                                    if($sour_size==$dest_size && $file_exif_date==$file_exif_date_dest)                                    {                                        unlink($temp);                                        continue;                                    }                                    else                                    {                                        $i++;                                        $file_full_name=$file_name.'_'.$sour_size.'.'.substr(strrchr($temp, '.'), 1);                                    }                                }                                echo $file_dir.DIRECTORY_SEPARATOR.$file_full_name."<br>";                                create_folders($file_dir);                                rename($temp,$file_dir.DIRECTORY_SEPARATOR.$file_full_name);                            }                        }                }            }        }    }}/** * 检查并删除为空的文件夹 * @param $path */function rm_empty_dir($path){    echo '目录:'.$path."<br>";    if(is_dir($path) && ($handle = opendir($path))!==false){//        print_r($path);exit;        while(($file=readdir($handle))!==false){// 遍历文件夹            if($file!='.' && $file!='..'){                $curfile = $path.DIRECTORY_SEPARATOR.$file;// 当前目录                if(is_dir($curfile)){// 目录                    rm_empty_dir($curfile);// 如果是目录则继续遍历                    if(count(scandir($curfile))==2){//目录为空,=2是因为.和..存在                        rmdir($curfile);// 删除空目录                    }                }            }        }        closedir($handle);    }}/** * 检查并建立目标文件夹 * @param $dir * @return bool */function create_folders($dir) {    return is_dir($dir) or (create_folders(dirname($dir)) and mkdir($dir, 0777));}/** * 获取图片EXIF信息 * @param $img * @return array */function getExif($img){    $exif = @exif_read_data($img,0,true);    return $exif;}error_reporting(E_ERROR | E_WARNING | E_PARSE);set_time_limit(0);define("SOUR_DIR","J:\\photo");define("DEST_DIR","J:\\tidy-up");read_all(SOUR_DIR,DEST_DIR);rm_empty_dir(SOUR_DIR);

  不复杂吧!过几天,抽点时间,整个Python版也试试!

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!