TIP게시판

제목 사진정보 읽고 쓰기
글쓴이 변종원(웅파) 작성시각 2013/06/05 18:59:59
댓글 : 0 추천 : 0 스크랩 : 0 조회수 : 13282   RSS
exif 관련 writer를 찾다가 제대로 작동 안해서 포기하고 iptc 쪽으로 선회했습니다.

사용법은 간단합니다.
        $filename = "/data/ad/f496a75c4307c95528d3bfef8c52d26a.jpg";
        $this->load->library('iptc', array('file'=>$filename));
        
        echo $this->iptc->set(IPTC_CAPTION,"here we go");
        echo $this->iptc->set(IPTC_COPYRIGHT_STRING,"sweettracker.net");
        echo "<BR>";echo "<BR>"; 
        $this->iptc->write();
        echo $this->iptc->get(IPTC_CAPTION);
        echo $this->iptc->get(IPTC_COPYRIGHT_STRING);
set, get에 사용하는 상수는 아래 라이브러리에 선언되어 있습니다.


라이브러리
<?php

    /************************************************************\
    
        IPTC EASY 1.0 - IPTC data manipulator for JPEG images
            
        All reserved www.image-host-script.com
        
        Sep 15, 2008
    
    \************************************************************/

    DEFINE('IPTC_OBJECT_NAME', '005');
    DEFINE('IPTC_EDIT_STATUS', '007');
    DEFINE('IPTC_PRIORITY', '010');
    DEFINE('IPTC_CATEGORY', '015');
    DEFINE('IPTC_SUPPLEMENTAL_CATEGORY', '020');
    DEFINE('IPTC_FIXTURE_IDENTIFIER', '022');
    DEFINE('IPTC_KEYWORDS', '025');
    DEFINE('IPTC_RELEASE_DATE', '030');
    DEFINE('IPTC_RELEASE_TIME', '035');
    DEFINE('IPTC_SPECIAL_INSTRUCTIONS', '040');
    DEFINE('IPTC_REFERENCE_SERVICE', '045');
    DEFINE('IPTC_REFERENCE_DATE', '047');
    DEFINE('IPTC_REFERENCE_NUMBER', '050');
    DEFINE('IPTC_CREATED_DATE', '055');
    DEFINE('IPTC_CREATED_TIME', '060');
    DEFINE('IPTC_ORIGINATING_PROGRAM', '065');
    DEFINE('IPTC_PROGRAM_VERSION', '070');
    DEFINE('IPTC_OBJECT_CYCLE', '075');
    DEFINE('IPTC_BYLINE', '080');
    DEFINE('IPTC_BYLINE_TITLE', '085');
    DEFINE('IPTC_CITY', '090');
    DEFINE('IPTC_PROVINCE_STATE', '095');
    DEFINE('IPTC_COUNTRY_CODE', '100');
    DEFINE('IPTC_COUNTRY', '101');
    DEFINE('IPTC_ORIGINAL_TRANSMISSION_REFERENCE',     '103');
    DEFINE('IPTC_HEADLINE', '105');
    DEFINE('IPTC_CREDIT', '110');
    DEFINE('IPTC_SOURCE', '115');
    DEFINE('IPTC_COPYRIGHT_STRING', '116');
    DEFINE('IPTC_CAPTION', '120');
    DEFINE('IPTC_LOCAL_CAPTION', '121');

    class Iptc {
        var $meta=Array();
        var $hasmeta=false;
        var $file=false;
        
        
        function __construct($file_arr) {
            $filename = $file_arr['file'];
            $size = getimagesize($filename,$info);
            $this->hasmeta = isset($info["APP13"]);
            if($this->hasmeta)
                $this->meta = iptcparse ($info["APP13"]);
            $this->file = $filename;
        }
        function set($tag, $data) {
            $this->meta ["2#$tag"]= Array( $data );
            $this->hasmeta=true;
        }
        function get($tag) {
            return isset($this->meta["2#$tag"]) ? $this->meta["2#$tag"][0] : false;
        }
        
        function dump() {
            print_r($this->meta);
        }
        function binary() {
            $iptc_new = '';
            foreach (array_keys($this->meta) as $s) {
                $tag = str_replace("2#", "", $s);
                $iptc_new .= $this->iptc_maketag(2, $tag, $this->meta[$s][0]);
            }        
            return $iptc_new;    
        }
        function iptc_maketag($rec,$dat,$val) {
            $len = strlen($val);
            if ($len < 0x8000) {
                   return chr(0x1c).chr($rec).chr($dat).
                   chr($len >> 8).
                   chr($len & 0xff).
                   $val;
            } else {
                   return chr(0x1c).chr($rec).chr($dat).
                   chr(0x80).chr(0x04).
                   chr(($len >> 24) & 0xff).
                   chr(($len >> 16) & 0xff).
                   chr(($len >> 8 ) & 0xff).
                   chr(($len ) & 0xff).
                   $val;
                   
            }
        }    
        function write() {
            if(!function_exists('iptcembed')) return false;
            $mode = 0;
            $content = iptcembed($this->binary(), $this->file, $mode);    
            $filename = $this->file;
                
            @unlink($filename); #delete if exists
            
            $fp = fopen($filename, "w");
            fwrite($fp, $content);
            fclose($fp);
        }    
        
        #requires GD library installed
        function removeAllTags() {
            $this->hasmeta=false;
            $this->meta=Array();
            $img = imagecreatefromstring(implode(file($this->file)));
            @unlink($this->file); #delete if exists
            imagejpeg($img,$this->file,100);
        }
    };
    
    
?>



태그 exif,IPTC
 다음글 xss_clean이 WYSIWYG의 style을 제거하... (3)
 이전글 ajax인지 아닌지 체크하기 (6)

댓글

없음