PHP

phpで、Nikonのカメラで撮ったjpeg画像から、レンズ情報を抜き出す方法

  • 引数は2つ。
    • 12-14mm のレンズを探す場合
      • php (filename.php) 12 24
    • 35mm 単焦点のレンズを探す場合
      • php (filename.php) 35
  • 実行後、レンズのディレクトリが作成され、
    そこにファイルが移動される。
  • 「PHP_JPEG_Metadata_Toolkit_1.12」 の場所
    The PHP JPEG Metadata Toolkit
  • 参考サイト : EXIF からレンズ名を取得する(Panasonic編)
    <?php
    
    	try{
    		include "./PHP_JPEG_Metadata_Toolkit_1.12/EXIF.php";
    		
    		//ディレクトリ
    		$dirName = "./";
    		
    		if(isset($argv[1])){
    			mkdir($argv[1]);
    
    			//ディレクトリハンドル取得
    			if ($dir = opendir($dirName)) {
    				//ファイル読み込み、表示
    				while (($file = readdir($dir)) !== false) {
    					if (substr($file,0,1) <> "."
    							and (substr($file,-3,3)=="jpg" or substr($file,-3,3)=="JPG" or substr($file,-3,3)=="Jpg")
    							and is_file($file)
    					)
    					{
    			
    						$exif = get_EXIF_JPEG( $file );
    			
    						$exif_lens_min_Numerator=-1;
    						$exif_lens_max_Numerator=-1;
    							
    						if(isset($exif["0"]["34665"]["Data"]["0"]["37500"]["Decoded Data"]["0"]["132"]["Data"]["0"]["Numerator"])){
    							$exif_lens_min_Numerator = $exif["0"]["34665"]["Data"]["0"]["37500"]["Decoded Data"]["0"]["132"]["Data"]["0"]["Numerator"];
    							$exif_lens_min_Denominator = $exif["0"]["34665"]["Data"]["0"]["37500"]["Decoded Data"]["0"]["132"]["Data"]["0"]["Denominator"];
    							$exif_lens_max_Numerator = $exif["0"]["34665"]["Data"]["0"]["37500"]["Decoded Data"]["0"]["132"]["Data"]["1"]["Numerator"];
    							$exif_lens_max_Denominator = $exif["0"]["34665"]["Data"]["0"]["37500"]["Decoded Data"]["0"]["132"]["Data"]["1"]["Denominator"];
    							$exif_lens_min = $exif_lens_min_Numerator / $exif_lens_min_Denominator;
    							$exif_lens_max = $exif_lens_max_Numerator / $exif_lens_max_Denominator;
    						}
    			
    						if(isset($exif["0"]["34665"]["Data"]["0"]["37386"]["Data"]["0"]["Numerator"])){
    							$exif_focal_length_Numerator = $exif["0"]["34665"]["Data"]["0"]["37386"]["Data"]["0"]["Numerator"];
    							$exif_focal_length_Denominator = $exif["0"]["34665"]["Data"]["0"]["37386"]["Data"]["0"]["Denominator"];
    							$exif_focal_length = $exif_focal_length_Numerator / $exif_focal_length_Denominator;
    						}
    			
    						// 				print "Lens : ".$exif_lens_min."-".$exif_lens_max."mm\n";
    						// 				print "focal length : ".$exif_focal_length."\n";
    			
    						if($argc>2 and isset($exif["0"]["34665"]["Data"]["0"]["37500"]["Decoded Data"]["0"]["132"]["Data"]["0"]["Numerator"])){
    							if ($argv[1]==$exif_lens_min and $argv[2]==$exif_lens_max){
    								print $file."\n";
    								system('mv '.$file.' ./'.$argv[1].'/'.$file);
    								
    							}
    						}elseif($argc>1  and isset($exif["0"]["34665"]["Data"]["0"]["37386"]["Data"]["0"]["Numerator"])){
    							if($argv[1]==$exif_focal_length){
    								print $file."\n";
    								system('mv '.$file.' ./'.$argv[1].'/'.$file);
    							}
    						}
    					}
    				}
    			}
    				
    		}else{
    			print "引数をセットして下さい。";
    		}
    		
    		
    	}catch(Exception $e){
    		print $file;
    		print $e->getMessage();
    		
    	}
    ?>

日付データの付加

<?php

	try{
		require_once "./EXIF.php";
		
		//ディレクトリ
		$dirName = "./";
		$aftDirName = "aftAddDate";
		
		//ディレクトリハンドル取得
		if ($dir = opendir($dirName)) {
			mkdir("aftAddDate");
			
			//ファイル読み込み、表示
			while (($file = readdir($dir)) !== false) {
				if (substr($file,0,1) <> "."
						and (substr($file,-3,3)=="jpg" or substr($file,-3,3)=="JPG" or substr($file,-3,3)=="Jpg")
						and is_file($file)
				){
		
					print $file."\n";
					$exif = get_EXIF_JPEG( $file );
		
					$readExifData="";					
					$aftReplaceSpace="";
					$aftReplaceCoron="";
					if(isset($exif["0"]["306"]["Data"]["0"])){
						$readExifData=$exif["0"]["306"]["Data"]["0"];
						$aftReplaceSpace=str_replace(" ","_",$readExifData);
						print $aftReplaceSpace."\n";
						$aftReplaceCoron=str_replace(":","-",$aftReplaceSpace);
						print $aftReplaceCoron."\n";
						system("cp ".$file." ./".$aftDirName."/".$aftReplaceCoron."_".$file);
					}
				}
			}
		}
		
	}catch(Exception $e){
		print $file;
		print $e->getMessage();
		
	}
?>

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-02-23 (土) 14:58:08 (60d)