이미지에 글자넣기 (gd)

<?php
define('LEFT', 0x01);
define('CENTER', 0x02);
define('RIGHT', 0x04);
define('TOP', 0x08);
define('MIDDLE', 0x10);
define('BOTTOM', 0x20);
class Font
{
var $text = "http://aaa.com";
var $color = 0x000000;
var $size = 10;
var $angle = 0;
var $font;
}
function getPrintToImage($szFilePath, &$objFont, $nFontAlign = 0x12)
{
# 이미지 파일이 존재하는지 체크한다.
if (!file_exists($szFilePath))
{
return FALSE;
}
# 이미지 파일 정보를 구한다.(크기및 타입)
$arrImgInfo = GetImageSize($szFilePath);
# 해당 이미지 포멧이 지원되는지 체크한다.
switch ($arrImgInfo[2])
{
case 1:
# GIF
if (!(ImageTypes() & IMG_GIF))
{
return FALSE;
}
$szContentType = "image/gif";
break;
case 2:
# JPG
if (!(ImageTypes() & IMG_JPG))
{
return FALSE;
}
$szContentType = "image/jpeg";
break;
case 3:
# PNG
if (!(ImageTypes() & IMG_PNG))
{
return FALSE;
}
$szContentType = "image/png";
break;
default:
return FALSE;
}
header ("Content-type: ".$szContentType);
# 이미지 파일을 읽어 이미지를 생성한다.
$fp = fopen($szFilePath, "rb");
$szContent = fread($fp, filesize($szFilePath));
fclose($fp);
$nImage = ImageCreateFromString($szContent);
# 프린트할 글의 색상을 준비한다.
$nBlue = $objFont->color & 0xFF;
$nGreen = $objFont->color >> 0x08 & 0xFF;
$nRed = $objFont->color >> 0x10 & 0xFF;
$nFontColor = ImageColorAllocate($nImage, $nRed, $nGreen, $nBlue);
# 프린트할 글의 위치를 결정한다.
$arrTTFBBox = ImageTTFBBox($objFont->size, $objFont->angle, $objFont->font, $objFont->text);
$nMax = max($arrTTFBBox[0], $arrTTFBBox[2], $arrTTFBBox[4], $arrTTFBBox[6]);
$nMin = min($arrTTFBBox[0], $arrTTFBBox[2], $arrTTFBBox[4], $arrTTFBBox[6]);
if ($nFontAlign & LEFT)
{
$nX = $arrTTFBBox[0] - $nMin;
}
else if ($nFontAlign & CENTER)
{
$nX = ($arrImgInfo[0] - ($nMax + $nMin)) / 2 + $arrTTFBBox[0];
}
else
{
$nX = $arrImgInfo[0] - $nMax + $arrTTFBBox[0];
}
$nMax = max($arrTTFBBox[1], $arrTTFBBox[3], $arrTTFBBox[5], $arrTTFBBox[7]);
$nMin = min($arrTTFBBox[1], $arrTTFBBox[3], $arrTTFBBox[5], $arrTTFBBox[7]);
if ($nFontAlign & TOP)
{
$nY = $arrTTFBBox[1] - $nMin;
}
else if ($nFontAlign & MIDDLE)
{
$nY = ($arrImgInfo[1] - ($nMax + $nMin)) / 2 + $arrTTFBBox[1];
}
else
{
$nY = $arrImgInfo[1] - $nMax + $arrTTFBBox[1];
}
ImageTTFText($nImage, $objFont->size, $objFont->angle, $nX, $nY, $nFontColor, $objFont->font, $objFont->text);
switch ($arrImgInfo[2])
{
case 1:
# GIF
ImageGIF($nImage);
break;
case 2:
# JPG
ImageJPEG($nImage);
break;
case 3:
# PNG
ImagePNG($nImage);
break;
default:
return FALSE;
}
return TRUE;
}
# 사용예제
$objFont = new Font;
$objFont->text = "My Name is Hoya.. mung ^^;";
$objFont->size = 25;
$objFont->color = 0x000000;
$objFont->angle = 45;
$objFont->font = "./arial.ttf";
$szFilePath = "hoya_eat.jpg";
getPrintToImage($szFilePath, $objFont, LEFT | MIDDLE);
?>
혹시 않되면 header("Content-Type: image/gif"); 코드 넣어서
어떤 파일인지 알려줄것
<?php // 프레임 고정 $LastModified = gmdate("D d M Y H:i:s", filemtime($HTTP_SERVER_VARS[SCRIPT_FILENAME])); header("Last-Modified: $LastModified GMT"); header("ETag: "$LastModified""); // 프레임 고정 끝 ?>
하기때문에 따로따로 나눠서 계산을 하면 상당히 구문도 길어지고 복잡해지니까
타임스탬프로 계산하는게 좋을꺼 같구요.
제가 생각한 방법은 이렇습니다.
<?php $str = "2006/12/31/23/56"; $tmp = explode("/",$str); $min = ($tmp[4]%5>0)? 5 - ($tmp[4]%5) : 0 ; $time = mktime($tmp[3],$tmp[4]+$min,0,$tmp[1],$tmp[2],$tmp[0]); echo date("Y/m/d/H/i",$time); ?>
분의 값을 5 에서 5로 나눈 나머지 값을 빼주면 5의 배수값중에 몇분이 모자라는지 나오겠죠.
분의 값이 7 분일경우 결과값은 3이 되겠져. 5 -(7%5) = 3분
이 값을 타임스탬프로를 생성할때 더해주면 5로 딱 떨어지는 값이 나올꺼구요.
그후에 date() 함수로 입맛에 맞게 형식을 만들면 되겠네요
<?php function hideWord($str,$extent=null,$color="",$pos=0) { $str_len = strlen($str); $str_key = array(); $seq = 0; for($i=0;$i<$str_len;$i++) { if(ord($str[$i]) > 128) { $seq++; if($seq%2==0) $str_key[]=$i+1; } else { $str_key[]=$i+1; } } $array_cnt = count($str_key); if($extent === null) $extent = intval($array_cnt/2); elseif($extent && $extent > $array_cnt) return $str; if($extent && $pos==0) $rtn = substr($str,0,$str_key[$extent-1]); elseif($extent && $pos==1) $rtn = substr($str,$str_key[$array_cnt - $extent-1],$str_len); for($i=$extent;$i<$array_cnt;$i++) { $ertn .= "X"; } if($color) $ertn = "<font color='".$color."'>".$ertn."</font>"; if($pos) return $ertn.$rtn; else return $rtn.$ertn; } ?>hideWord(문자열,보여줄길이,마킹색상,마킹위치);
보여줄길이 null -> 문자열 절반만 마킹
보여줄길이 0 -> 전체 문자열 마킹
마킹위치 -> 0 왼쪽 글자보여줌
마킹위치 -> 1 오른쪽 글자만 보여줌
echo hideWord('가1나다라마마1212ㄴ안아',3,'red',0);
-> 가1나XXXXXXXXXXX
echo hideWord('가1나다라마마1212ㄴ안아',3,'red',1);
-> XXXXXXXXXXXㄴ안아