这个年代,谁要没有几张照片都对不起自己。从有相机到照的第一张照片起,留下了太多美好的记忆,记忆已成过往,回忆却希望永恒。奈何这些年照片太多,粗略看了下,将近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版也试试!
来源:https://www.cnblogs.com/jessicor/p/12165921.html