用PHP整理照片和视频文件

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

posted @ 2020-01-08 12:26  5255号蜘蛛精  阅读(417)  评论(0编辑  收藏  举报