JPG 파일! 코멘트 읽어오기 및 기록하기 > php

본문 바로가기
사이트 내 전체검색

php

JPG 파일! 코멘트 읽어오기 및 기록하기

페이지 정보

작성자 서방님 댓글 2건 조회 141회 작성일 07-07-20 09:22

본문

코드부터 올립니다. 'o');;; 별로 길지도 않고, 볼것도 별로 없습니다.
잡담은 아래에...

<?php

/*
    jpg 파일의 코멘트 읽어오기 및 기록하기
    by BiHon
/*

// file_get_contents, file_put_contents 함수 지원 안하는 구버전 등을 위한 날림 함수

// file_get_contents 지원 버전 : PHP 4 >= 4.3.0, PHP 5
if ( !function_exists('file_get_contents') ) {
function file_get_contents($filename)
{
    $fp = fopen($filename,'r');
    $contents = fread($fp,filesize($filename));
    fclose($fp);
    return $contents;
}}

// file_put_contents 지원 버전 : PHP 5
if ( !function_exists('file_put_contents') ) {
function file_put_contents($filename,$contents)
{
    $fp = fopen($filename,'w+');
    $contents = fread($fp,$contents);
    fclose($fp);
}}

*/

// HEX값 출력(디버깅용-불필요)
function get_hex($s)
{
    for ($i=0,$l=strlen($s);$i<$l;$i++)
    {
        printf("%02X ",ord($s{$i}));
        if ( ($i+1)%16==0 ) echo "n";
    }
    if ( $i%16 ) echo "n";
}

// jpg 파일의 comment 읽기
// ★ 확인도 안하고 덧글 남기는 분들을 위해 별표!
// Exif Functions 사용이 가능하다면, exif_read_data() 함수로 쉽게 구할 수 있습니다. -_-);
function jpg_get_comment($filename)
{
    if ( !is_file($filename) ) return false; // 파일이 없거나 아니면
    $filesize = filesize($filename);
    if ( !$filesize ) return false; // 빈 파일이면
    $contents = file_get_contents($filename); // 내용 읽음
    if ( substr($contents,0,2)!="xFFxD8" ) return false; // jpg 파일 아님
    if ( ($pos=strpos($contents,"xFFxFE"))===false ) return ''; // 코멘트 발견 못함
    $length = array_shift(unpack("n",substr($contents,$pos+2,2))) - 2; // 코멘트 길이 구함
    if ( $length>$filesize || $pos+$length>$filesize ) return false; // 범위 벗어나면
    return substr($contents,$pos+4,$length); // 코멘트 반환
}

// jpg 파일에 comment 기록
// 삭제 옵션은 서비스 차원에서 간단하게 구현
function jpg_put_comment($filename,$comment,$delete=false)
{
    $limit = 30000; // 코멘트 길이 제한. ACDSee로 테스트;
    $len = strlen($comment);
    if ( !$len || $len>$limit ) return false; // 코멘트 입력 안되거나 길이 넘으면
    if ( !is_file($filename) ) return false; // 파일이 없거나 아니면
    $filesize = filesize($filename);
    if ( !$filesize ) return false; // 빈 파일이면
    $contents = file_get_contents($filename); // 내용 읽음
    if ( substr($contents,0,2)!="xFFxD8" ) return false; // jpg 파일 아님
    if ( ($pos=strpos($contents,"xFFxFE"))!==false ) { // 코멘트 있는 경우
        $length = array_shift(unpack("n",substr($contents,$pos+2,2))) - 2; // 기존 코멘트 길이 구함
        $head = substr($contents,0,$pos+2); // 머리
        $tail = substr($contents,$pos+$length+5); // 꼬리
    } elseif ( ($pos=strpos($contents,"xFFxC0"))!==false ) { // 코멘트 없는 경우
        $head = substr($contents,0,$pos+1)."xFE"; // 머리
        $tail = substr($contents,$pos+1); // 꼬리
    } else {
        return false; // 위치 찾지 못함
    }
    if ( $delete ) {
        file_put_contents($filename,substr($head,0,-1).$tail);
    } else {
        file_put_contents($filename,$head.pack("n",$len+2).$comment."xFF".$tail);
    }
    return true;
}

// 사용 예~~~

// 코멘트 읽어오기
$comment = jpg_get_comment('phpschool.jpg');
echo 'this is comment : '.$comment.'<br />'."n";

// 코멘트 변경하기
jpg_put_comment('phpschool.jpg','PHPSchool.COM');

// 다시 읽어와 확인하기
$comment = jpg_get_comment('phpschool.jpg');
echo 'this is comment : '.$comment.'<br />'."n";

?>


밤중에 xhtml 페이지 코딩질하다 잠시 쉴겸 예전에 만들어둔 코드를
"거까이꺼 대충" 다듬어 올립니다.
제목 그대로 jpg(jpeg) 이미지 파일의 코멘트를 읽거나 기록해주는 함수입니다.
상세 조건이 조금 빠졌습니다만 위 조건들만으로도 제대로 돌아갑니다.

혹시나 하고 주석에도 덧붙였지만, Exif Functions 사용이 가능하면
exif_read_data() 함수로 코멘트를 쉽게 구할 수 있습니다.
예) $info = exif_read_data('filename'); echo $info['COMMENT'][0];

첨에 만들때 1x1x1 jpg 파일 하나 만들고, ACDSee에서 코멘트 수정하고
수정전과 수정후의 HEX값 비교를 하는 아주 단순무식한 방법을 썼었죠.
완성되고 다른 이미지들로 테스트해봤는데 제대로 돌아가던데
혹 이상있으면 연락좀 주세요. -0-);;;

...jpg comment에 php 코드 넣고 돌리는 쓰잘데기 없는 헛짓 금지.

출처 : http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=55299

댓글목록

등록된 댓글이 없습니다.

Total 612건 40 페이지
게시물 검색

회원로그인

접속자집계

오늘
113
어제
225
최대
1,347
전체
154,872
Latest Crypto Fear & Greed Index

그누보드5
Copyright © 서방님.kr All rights reserved.