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
댓글목록
등록된 댓글이 없습니다.