## 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] '."\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'); } } ?>