download this file: exif-rename.php view text/plain: exif-rename.php file encoding: UTF-8 [goback]
<?php
##
## exif file rename by san2@2010.11.03
##
## usage: php this_filename [--test|--preview] <dirname>
##
function str2float($str)
{
list($a,$b) = explode('/',$str);
$float = sprintf('%.1f',$a/$b);
return $float;
}
## check exif module
##
if(!function_exists('exif_read_data'))
{
echo 'Your PHP version is not support EXIF'."\n"; // error
exit(1);
}
## check argv
##
if(preg_match(';--(test|preview);i',$_SERVER['argv'][1]))
{
$preview = TRUE;
$path = preg_replace(';/+$;','',$_SERVER['argv'][2]);
}
else $path = preg_replace(';/+$;','',$_SERVER['argv'][1]);
if(is_dir($path)) $path = $path.'/*';
$files = glob($path);
if(!$files)
{
echo 'usage: php '.$_SERVER['argv'][0].' [--test|--preview] <dirname>'."\n"; // error_log() not work in win32
exit(1); // error
}
echo "target : $path \n";
foreach($files AS $fname)
{
if(is_dir($fname)) continue;
if(!$exif = exif_read_data($fname,IFD0+EXIF,TRUE)) continue;
$model = str_replace(' ','.',$exif['IFD0']['Model']);
$iso = $exif['EXIF']['ISOSpeedRatings'];
$exptime = $exif['EXIF']['ExposureTime'];
$flength = $exif['EXIF']['FocalLength'];
$fnumber = $exif['EXIF']['FNumber'];
if(!$model || !$iso) continue;
## exposure time
##
if(preg_match(';/1$;',$exptime)) $exptime = preg_replace(';/1$;','',$exptime).'s';
else if(preg_match(';^1/;',$exptime)) $exptime = preg_replace(';^1/;','',$exptime).'ms';
else $exptime = str2float($exptime).'s';
## focal length
##
if(preg_match(';/1$;',$flength)) $flength = preg_replace(';/1$;','',$flength);
else $flength = str2float($flength);
## F number
##
if(preg_match(';^0/;',$fnumber)) $fnumber = 0;
else $fnumber = str2float($fnumber);
if($model) $model .= '-';
if($iso) $iso = 'ISO'.$iso.'-';
if($exptime) $exptime .= '-';
$flength = $flength ? $flength.'mm-' : '';
$fnumber = $fnumber ? 'F'.$fnumber.'-' : '';
$addstr = preg_replace(';[-]+$;','',$model.$iso.$exptime.$flength.$fnumber);
$tail = substr(strrchr($fname,'.'),1);
$toname = preg_replace(";\.$tail$;",'-'.$addstr.'.'.$tail,$fname);
//if($preview) echo "$fname => $toname\n";
if($preview) printf('%-40s => %s'."\n",$fname,$toname);
else
{
$r = rename($fname,$toname);
if($r) printf('%-40s => %s'."\n",$fname,$toname);
else printf('%-40s <= %s'."\n",$fname,'rename ERROR');
}
}
?>