홈으로 | 무료회원가입 | 아이디/비번찾기
추천음악방송
사진 카레마 정보 exif 클래스
11년 전
<?php
class ImageExif {
    private $picture;
    private $exifargs = array();
    private $setkey_args = array(
        'file'        => array('FileName','FileSize','FileDateTime','MimeType'),
        'computed'    => array('Width','Height','ApertureFNumber','FocusDistance','CCDWidth'),
                        // 넓이,높이,조리개,촬영거리,CCD
        'ifdo'        => array('Make','Model','Software'),
        'exif'        => array('ExposureTime','FNumber','Flash','WhiteBalance','DigitalZoomRatio','ISOSpeedRatings','FocalLength','MeteringMode','DateTimeOriginal'),
                        // 노출모드,조리개값,플래시사용여부,화이트발란스,줌,ISO감도,초점거리,측광모드 ,오리지날촬영시간
        'makenote'    => array('FirmwareVersion','UndefinedTag:0x0095')
                        // 펌웨어버전,사용렌즈
    );
    
    # 사진 풀경로
    public function __construct($picture){
        # 로컬 파인인지 체크
        if(!file_exists($picture))
            throw new ErrorReporter('',30);

        # 함수 enable 체크
        if(function_exists(read_exif_data)){
            $this->exifargs = read_exif_data($picture,0,true);
            if($this->exifargs ===false)
                throw new ErrorReporter('');
        }
    }
    
    # 파일 계산
    public function calcuSize($size)
    {
        $result = '';
        if(!empty($size)){
            $result = sprintf("%0.1f KB", ($size/1024));
            if($r>1024){
                $result = sprintf("%0.1f MB", ($r/1024)); //수점 이하가 0.5 는 1로 반올림한다.
            }
        }
    return $result;
    }
    
    # FILE
    public function getFile()
    {
        $result = array();
        if($this->exifargs['FILE']){
            $args =& $this->exifargs['FILE'];
            foreach($this->setkey_args['file'] as $k){
                switch($k){
                    case 'FileDateTime': $result[$k] = date("Y년 m월 d일 H:i:s",$args[$k]); break;
                    case 'FileSize' : $result[$k] = self::calcuSize($args[$k]); break;
                    default : $result[$k]= $args[$k];
                }
            }
        }
    return $result;
    }
    
    # COMPUTED
    public function getComputed()
    {
        $result = array();
        if($this->exifargs['COMPUTED']){
            $args =& $this->exifargs['COMPUTED'];
            foreach($this->setkey_args['computed'] as $k){
                switch($k){
                    case 'FocusDistance':
                        $result[$k] = $args[$k];
                        if(strpos($args[$k],'/') !==false){
                            $tmpdistance = explode('/',$args[$k]);
                            $result[$k] = ($tmpdistance[0]/$tmpdistance[1]).'mm';
                        }
                        break;
                    case 'CCDWidth':
                        $result[$k] = (!empty($args[$k])) ? substr($args[$k],0,5).' mm' : '';
                        break;
                    default :
                        $result[$k] = $args[$k];
                }
            }
        }
    return $result;
    }
    
    # IFDO
    public function getIfdo()
    {
        $result = array();
        if($this->exifargs['IFD0']){
            $args =& $this->exifargs['IFD0'];
            foreach($this->setkey_args['ifdo'] as $k){
                switch($k){
                    case 'Make':
                        $result[$k] = str_replace('CORPORATION','',$args[$k]);
                        break;
                    default:
                        $result[$k] = $args[$k];    
                }
            }
        }
    return $result;
    }
    
    # EXIF
    public function getExif()
    {
        $result = array();
        if($this->exifargs['EXIF']){
            $args =& $this->exifargs['EXIF'];
            foreach($this->setkey_args['exif'] as $k){
                switch($k){
                    case 'Flash': $result[$k] = ($args[$k]==1) ? 'ON' : 'OFF'; break;
                    case 'ExposureTime':
                        $result[$k] = $args[$k];
                        if(strpos($args[$k],'/') !==false){
                            $tmpexpo = explode('/',$args[$k]);
                            $result[$k] = ($tmpexpo[0]/$tmpexpo[0]).'/'.($tmpexpo[1]/$tmpexpo[0]).'s';
                        }
                        break;
                    case 'FocalLength':
                        $result[$k] = $args[$k];
                        if(strpos($args[$k],'/') !==false){
                            $tmpfocal    = explode('/',$args[$k]);
                            $result[$k] = ($tmpfocal[0]/$tmpfocal[1]).'mm';
                        }
                        break;
                    default: $result[$k] = $args[$k];
                }
            }
        }
    return $result;
    }
    
    # MAKENOTE
    public function getMakenote()
    {
        $result = array();
        if($this->exifargs['MAKENOTE']){
            $args =& $this->exifargs['MAKENOTE'];
            foreach($this->setkey_args['makenote'] as $k){
                $result[$k] = $args[$k];
            }
        }
    return $result;
    }
    
    # 값이 있는 것들만 한번에 추출하기
    public function getAvailable(){
        $args = array();
        if(count($this->exifargs)){
            foreach($this->setkey_args as $k => $v){
                $methodName = 'get'.ucwords($k);
                $args += call_user_func_array(array(&$this, $methodName), array());
            }
        }
    return $args;
    }
}
?>



위에 있는 exif 클래스를 상속받아
뷰클래스를 만들어 사용하면 좋습니다.

뷰 클래스에서 파일태그에 대한 한글명 자동출력을 설정하면 더 편하겠죠...

일단 위 클래스 테스트

<?php
$path = $_SERVER['DOCUMENT_ROOT'];
include_once $path.'/config/config.php';

try{
    $out->outPrintln("<img src='./testdirectory/P100119003.jpg'>");
    $exif = new ImageExif($path.'/testdirectory/P100119003.jpg');
    $args = $exif->getAvailable();
    if(is_array($args)){
        foreach($args as $k =>$v){
            if(!empty($v)){
                $out->outPrintln($k.' : '.$v);
            }
        }
    }
    
    $out->outPrintln("----------------------------");
    
    $out->outPrintln("<img src='./testdirectory/DSC_0369.JPG'>");
    $exif2 = new ImageExif($path.'/testdirectory/DSC_0369.JPG');
    $args2 = $exif2->getAvailable();
    if(is_array($args2)){
        foreach($args2 as $k2 =>$v2){
            if(!empty($v2)){
                $out->outPrintln($k2.' : '.$v2);
            }
        }
    }
}
catch(ErrorReporter $e){
    $out->outPrintln($e->getTraceText());
    $out->outPrintln($e->getMessage());
    if( $e->getCode() ) $out->outPrint($error_msg[$e->getCode()]);
}
?>
추천추천 : 497 추천 목록
번호 제목
3,033
 PHP 정규식 정리
3,032
 PHP 정규식을 활용한 태그 및 특정 문자열 제거 및 추출 방법
3,031
 php 크롤링 또는 파싱 함수, 정규식 모음
3,030
 제이쿼리 기본 명령어
3,029
 웹페이지 가로 모드세로 모드 인식하기
3,028
 모바일 웹 화면 강제 회전(가로모드 고정)
3,027
 [HTML5]에서 frameset 대체 방법과 iframe 속성
3,026
 HTML <Audio> 사용법
3,025
 윈도우10 시스템파일 손상 (초간단 오류 복구방법!!)
3,024
 PHP 파일 존재 여부 파악하기(로컬 파일 존재 및 원격지 파일 존재)
3,023
 [CSS] 박스 세로 가운데 중앙 정렬 6가지
3,022
 CSS Layout 수평 & 수직 정렬
3,021
 여러 도메인들 간 쿠키 공유하기
3,020
 태그 사이에 있는 텍스트를 추출
3,019
 [JQuery] textbox focus on off일때 숫자 콤마 보여주기
3,018
 쿠키 생성,가져오기,삭제
3,017
 사용자 함수 모음
3,016
 마우스,키보드 제한 ( 오른쪽클릭,드래그,영역선택등..)
3,015
 [HTML5] <video> - DOM으로 제어하기
3,014
 HTML5 video 태그에서 영상 좌우반전
3,013
 PHP - 특정 태그 및 문자열 추출, 제거
3,012
 [PHP] define과 defined의 차이
3,011
 우클릭 완벽차단 스크립트
3,010
 iframe 높이 100% 맞추기
3,009
 curl 함수를 이용한 HTTP REFERER 변경
목록
뮤직트로트 부산광역시 부산진구 가야동 ㅣ 개인정보취급방침
Copyright (C) musictrot All rights reserved.