[함수] 어설픈 GD 사용 EZBtn ???
인터넷정보2007. 12. 22. 11:26
활용도는 약 0.001% 일지도 모릅니다.
이왕 온김에 홈피 광고도 하고 ㅎㅎ
http://www.mibany.com/ezbtn/
소스가 길어 좀 길어서 ....
일단 먼저 링크 페이지에 동작되는 샘플을 달았습니다.
테스트 해보셔도 개안을듯 합니다.
뭐 차후 구글처럼 Chart나 해봐야 할까나????
class EZBtn {
//변환할 원본 파일
var $Files = null;
//이미지 정보
var $Imgs = array();
//변환할 이미지 정보
var $Config = array();
var $IsSave = false;
var $UseUTF8 = false;
//저장 이미지 경로
var $Path = "Img";
//변환 종류
var $Mode = "4C"; //4C, 2W, 2H
//적용 폰트
var $UseFont = "Font/sandoldana_m.ttf";
//원본에서 잘라 사용할 사이즈 (픽셀)
var $CutSize = 8;
//이미지 정보를 담습니다.
function SetImg($Files) {
$this->Files = $Files;
$this->Imgs = array();
if(is_array($Files)) foreach($Files as $No=>$Name) $this->Imgs[$No] = $this->GetImgInfo($Name);
else $this->Imgs = $this->GetImgInfo($Files);
}
//이미지 정보를 구합니다.
function GetImgInfo($FileName) {
$ImgInfo['Name'] = $FileName;
$ImgInfo['File'] = $this->GetNameExt($FileName);
list($ImgInfo['Width'], $ImgInfo['Height'], $ImgInfo['Type'], $ImgInfo['Attr']) = getimagesize($FileName);
return $ImgInfo;
}
//파일명와 확장자를 분리합니다.
function GetNameExt($FileName) {
preg_match('/(.*)\.([^\.]+)$/', $FileName, $Match);
$File['name'] = $Match[1];
$File['ext'] = strtolower($Match[2]);
return $File;
}
//버턴을 생성합니다.
function MakeBtnImg($Files, $Text='') {
$this->SetImg($Files);
$_func = sprintf("CreateButton_%s", $this->Mode);
if(method_exists($this, $_func)) {
if(is_array($this->Files)) {
foreach($this->Imgs as $Img) {
$Im = $this->GetImg($Img);
if($Im) {
if($this->IsSave) $this->SaveImg($Img, $this->$_func($Img, $Im), 'result');
else $this->ImgView($Img, $this->$_func($Img, $Im));
}
}
}
else {
$Im = $this->GetImg($this->Imgs);
if($Im) {
$SaveIm = $this->$_func($this->Imgs, $Im);
if($Text) $SaveIm = $this->SetText($SaveIm, $Text);
if($this->IsSave) $this->SaveImg($this->Imgs, $SaveIm, 'result');
else $this->ImgView($this->Imgs, $SaveIm);
}
}
}
}
//16진수 color를 RGB형태로 변환한다.
function HEX2RGB($Color) {
$String = str_replace("#","",$Color);
$RGB[] = hexdec(substr($String,0,2)); //red
$RGB[] = hexdec(substr($String,2,2)); //green
$RGB[] = hexdec(substr($String,4,2)); //blue
return $RGB;
}
//버턴위에 글자를 입힙니다.
function SetText($Im, $Text) {
if($this->UseUTF8) $Text = iconv("EUC-KR", "UTF-8", $Text);
$size = ($this->Config['FontSize'])?$this->Config['FontSize']:16;
$top = ($this->Config['FontTop'])?$this->Config['FontTop']:25;
$left = ($this->Config['FontLeft'])?$this->Config['FontLeft']:10;
//기울기 각도
$angle = ($this->Config['FontAngle'])?$this->Config['FontAngle']:0;
$color = ($this->Config['FontColor'])?$this->HEX2RGB($this->Config['FontColor']):array(60, 60, 60);
$TextColor = imagecolorallocate($Im, $color[0], $color[1], $color[2]);
imagettftext($Im, $size, $angle, $left, $top, $TextColor, $this->UseFont, $Text);
return $Im;
}
//버턴으로 만들 이미지를 생성합니다.
function GetImg($Img) {
if($Img['Type']<1 && $Img['Type'] > 3) return false;
if($Img['Type']==1) $Im = imagecreatefromgif($Img['Name']);
else if($Img['Type']==2) $Im = imagecreatefromjpeg($Img['Name']);
else if($Img['Type']==3) $Im = imagecreatefrompng($Img['Name']);
return $Im;
}
//원본 이미지 4개의 귀퉁이를 잘라 버턴으로 만듭니다.
function CreateButton_4C($Img, $Im) {
$Width = ($this->Config['BtnWidth'])?$this->Config['BtnWidth']:$Img['Width'];
$Height = ($this->Config['BtnHeight'])?$this->Config['BtnHeight']:$Img['Height'];
$SaveIm = imagecreatetruecolor($Width, $Height);
$PosWidth = $Img['Width']-$this->CutSize;
$PosHeight = $Img['Height']-$this->CutSize;
$PosWidth2 = $Img['Width']-$this->CutSize*2;
$PosHeight2 = $Img['Height']-$this->CutSize*2;
$RePosWidth = $Width-$this->CutSize;
$RePosHeight = $Height-$this->CutSize;
$RePosWidth2 = $Width-$this->CutSize*2;
$RePosHeight2 = $Height-$this->CutSize*2;
//1
imagecopy($SaveIm, $Im, 0, 0, 0, 0, $this->CutSize, $this->CutSize);
//2
imagecopy($SaveIm, $Im, $RePosWidth, 0, $PosWidth, 0, $this->CutSize, $this->CutSize);
//3
imagecopy($SaveIm, $Im, 0, $RePosHeight, 0, $PosHeight, $this->CutSize, $this->CutSize);
//4
imagecopy($SaveIm, $Im, $RePosWidth, $RePosHeight, $PosWidth, $PosHeight, $this->CutSize, $this->CutSize);
//상단가운데
imagecopyresampled($SaveIm, $Im, $this->CutSize, 0, $this->CutSize, 0, $RePosWidth2, $this->CutSize, $this->CutSize, $this->CutSize);
//하단가운데
imagecopyresampled($SaveIm, $Im, $this->CutSize, $RePosHeight, $this->CutSize, $PosHeight, $RePosWidth2, $this->CutSize, $this->CutSize, $this->CutSize);
//왼쪽가운데
imagecopyresampled($SaveIm, $Im, 0, $this->CutSize, 0, $this->CutSize, $this->CutSize, $RePosHeight2, $this->CutSize, $this->CutSize);
//오른쪽가운데
imagecopyresampled($SaveIm, $Im, $RePosWidth, $this->CutSize, $PosWidth, $this->CutSize, $this->CutSize, $RePosHeight2, $this->CutSize, $this->CutSize);
//가운데
imagecopyresampled($SaveIm, $Im, $this->CutSize, $this->CutSize, $this->CutSize, $this->CutSize, $RePosWidth2, $RePosHeight2, $this->CutSize, $this->CutSize);
imagedestroy($Im);
return $SaveIm ;
}
//원본 이미지 좌우양쪽을 잘라 버턴으로 만듭니다.
function CreateButton_2W($Img, $Im) {
$Width = ($this->Config['BtnWidth'])?$this->Config['BtnWidth']:$Img['Width'];
$Height = $Img['Height'];
$SaveIm = imagecreatetruecolor($Width, $Height);
$PosWidth = $Img['Width']-$this->CutSize;
$PosHeight = $Img['Height']-$this->CutSize;
$PosWidth2 = $Img['Width']-$this->CutSize*2;
$PosHeight2 = $Img['Height']-$this->CutSize*2;
$RePosWidth = $Width-$this->CutSize;
$RePosHeight = $Height-$this->CutSize;
$RePosWidth2 = $Width-$this->CutSize*2;
$RePosHeight2 = $Height-$this->CutSize*2;
//왼쪽
imagecopy($SaveIm, $Im, 0, 0, 0, 0, $this->CutSize, $Img['Height']);
//오른쪽
imagecopy($SaveIm, $Im, $RePosWidth, 0, $PosWidth, 0, $this->CutSize, $Img['Height']);
//가운데
imagecopyresampled($SaveIm, $Im, $this->CutSize, 0, $this->CutSize, 0, $RePosWidth2, $Img['Height'], $this->CutSize, $Img['Height']);
imagedestroy($Im);
return $SaveIm ;
}
//원본 이미지 상하양쪽을 잘라 버턴으로 만듭니다.
function CreateButton_2H($Img, $Im) {
$Width = $Img['Width'];
$Height = ($this->Config['BtnHeight'])?$this->Config['BtnHeight']:$Img['Height'];
$SaveIm = imagecreatetruecolor($Width, $Height);
$PosWidth = $Img['Width']-$this->CutSize;
$PosHeight = $Img['Height']-$this->CutSize;
$PosWidth2 = $Img['Width']-$this->CutSize*2;
$PosHeight2 = $Img['Height']-$this->CutSize*2;
$RePosWidth = $Width-$this->CutSize;
$RePosHeight = $Height-$this->CutSize;
$RePosWidth2 = $Width-$this->CutSize*2;
$RePosHeight2 = $Height-$this->CutSize*2;
//상단
imagecopy($SaveIm, $Im, 0, 0, 0, 0, $Img['Width'], $this->CutSize);
//하단
imagecopy($SaveIm, $Im, 0, $RePosHeight, 0, $PosHeight, $Img['Width'], $this->CutSize);
//가운데
imagecopyresampled($SaveIm, $Im, 0, $this->CutSize, 0, $this->CutSize, $Img['Width'], $RePosHeight2, $Img['Width'], $this->CutSize);
imagedestroy($Im);
return $SaveIm;
}
//만든 이미지를 저장합니다.
function SaveImg($Img, $SaveIm, $Status) {
$SaveFileName = sprintf("%s/%s_%s.%s", $this->Path, $Img['File']['name'], $Status, $Img['File']['ext']);
if($Img['Type']==1) imagegif($SaveIm, $SaveFileName);
else if($Img['Type']==2) imagejpeg($SaveIm, $SaveFileName, 100);
else if($Img['Type']==3) imagepng($SaveIm, $SaveFileName);
// 메모리에 있는 그림 삭제
imagedestroy($SaveIm);
}
//resource 에 담긴 이미지를 봅니다.
function ImgView($Img, $SaveIm) {
if($Img['Type']==1) imagegif($SaveIm);
else if($Img['Type']==2) imagejpeg($SaveIm, 100);
else if($Img['Type']==3) imagepng($SaveIm);
// 메모리에 있는 그림 삭제
imagedestroy($SaveIm);
}
//저장된 이미지를 봅니다.
function SaveImgView($FileName) {
$NameExt = $this->GetNameExt($FileName);
$FileSize = filesize($FileName);
if(eregi("(MSIE 5.5|MSIE 6.0|MSIE 7.0)", $_SERVER['HTTP_USER_AGENT'])) { // 브라우져 구분
Header("Content-Transfer-Encoding: binary");
} else {
Header("Content-Description: PHP3 Generated Data");
}
Header(sprintf("Content-Type: %s", $NameExt['ext']));
Header(sprintf("Content-Disposition: attachment; filename=%s", $FileName));
Header(sprintf("Content-Length: %s", $FileSize));
Header("Pragma: no-cache");
Header("Expires: 0");
$fp = fopen($FileName, "r");
if(!fpassthru($fp)) fclose($fp);
}
}
이왕 온김에 홈피 광고도 하고 ㅎㅎ
http://www.mibany.com/ezbtn/
소스가 길어 좀 길어서 ....
일단 먼저 링크 페이지에 동작되는 샘플을 달았습니다.
테스트 해보셔도 개안을듯 합니다.
뭐 차후 구글처럼 Chart나 해봐야 할까나????
class EZBtn {
//변환할 원본 파일
var $Files = null;
//이미지 정보
var $Imgs = array();
//변환할 이미지 정보
var $Config = array();
var $IsSave = false;
var $UseUTF8 = false;
//저장 이미지 경로
var $Path = "Img";
//변환 종류
var $Mode = "4C"; //4C, 2W, 2H
//적용 폰트
var $UseFont = "Font/sandoldana_m.ttf";
//원본에서 잘라 사용할 사이즈 (픽셀)
var $CutSize = 8;
//이미지 정보를 담습니다.
function SetImg($Files) {
$this->Files = $Files;
$this->Imgs = array();
if(is_array($Files)) foreach($Files as $No=>$Name) $this->Imgs[$No] = $this->GetImgInfo($Name);
else $this->Imgs = $this->GetImgInfo($Files);
}
//이미지 정보를 구합니다.
function GetImgInfo($FileName) {
$ImgInfo['Name'] = $FileName;
$ImgInfo['File'] = $this->GetNameExt($FileName);
list($ImgInfo['Width'], $ImgInfo['Height'], $ImgInfo['Type'], $ImgInfo['Attr']) = getimagesize($FileName);
return $ImgInfo;
}
//파일명와 확장자를 분리합니다.
function GetNameExt($FileName) {
preg_match('/(.*)\.([^\.]+)$/', $FileName, $Match);
$File['name'] = $Match[1];
$File['ext'] = strtolower($Match[2]);
return $File;
}
//버턴을 생성합니다.
function MakeBtnImg($Files, $Text='') {
$this->SetImg($Files);
$_func = sprintf("CreateButton_%s", $this->Mode);
if(method_exists($this, $_func)) {
if(is_array($this->Files)) {
foreach($this->Imgs as $Img) {
$Im = $this->GetImg($Img);
if($Im) {
if($this->IsSave) $this->SaveImg($Img, $this->$_func($Img, $Im), 'result');
else $this->ImgView($Img, $this->$_func($Img, $Im));
}
}
}
else {
$Im = $this->GetImg($this->Imgs);
if($Im) {
$SaveIm = $this->$_func($this->Imgs, $Im);
if($Text) $SaveIm = $this->SetText($SaveIm, $Text);
if($this->IsSave) $this->SaveImg($this->Imgs, $SaveIm, 'result');
else $this->ImgView($this->Imgs, $SaveIm);
}
}
}
}
//16진수 color를 RGB형태로 변환한다.
function HEX2RGB($Color) {
$String = str_replace("#","",$Color);
$RGB[] = hexdec(substr($String,0,2)); //red
$RGB[] = hexdec(substr($String,2,2)); //green
$RGB[] = hexdec(substr($String,4,2)); //blue
return $RGB;
}
//버턴위에 글자를 입힙니다.
function SetText($Im, $Text) {
if($this->UseUTF8) $Text = iconv("EUC-KR", "UTF-8", $Text);
$size = ($this->Config['FontSize'])?$this->Config['FontSize']:16;
$top = ($this->Config['FontTop'])?$this->Config['FontTop']:25;
$left = ($this->Config['FontLeft'])?$this->Config['FontLeft']:10;
//기울기 각도
$angle = ($this->Config['FontAngle'])?$this->Config['FontAngle']:0;
$color = ($this->Config['FontColor'])?$this->HEX2RGB($this->Config['FontColor']):array(60, 60, 60);
$TextColor = imagecolorallocate($Im, $color[0], $color[1], $color[2]);
imagettftext($Im, $size, $angle, $left, $top, $TextColor, $this->UseFont, $Text);
return $Im;
}
//버턴으로 만들 이미지를 생성합니다.
function GetImg($Img) {
if($Img['Type']<1 && $Img['Type'] > 3) return false;
if($Img['Type']==1) $Im = imagecreatefromgif($Img['Name']);
else if($Img['Type']==2) $Im = imagecreatefromjpeg($Img['Name']);
else if($Img['Type']==3) $Im = imagecreatefrompng($Img['Name']);
return $Im;
}
//원본 이미지 4개의 귀퉁이를 잘라 버턴으로 만듭니다.
function CreateButton_4C($Img, $Im) {
$Width = ($this->Config['BtnWidth'])?$this->Config['BtnWidth']:$Img['Width'];
$Height = ($this->Config['BtnHeight'])?$this->Config['BtnHeight']:$Img['Height'];
$SaveIm = imagecreatetruecolor($Width, $Height);
$PosWidth = $Img['Width']-$this->CutSize;
$PosHeight = $Img['Height']-$this->CutSize;
$PosWidth2 = $Img['Width']-$this->CutSize*2;
$PosHeight2 = $Img['Height']-$this->CutSize*2;
$RePosWidth = $Width-$this->CutSize;
$RePosHeight = $Height-$this->CutSize;
$RePosWidth2 = $Width-$this->CutSize*2;
$RePosHeight2 = $Height-$this->CutSize*2;
//1
imagecopy($SaveIm, $Im, 0, 0, 0, 0, $this->CutSize, $this->CutSize);
//2
imagecopy($SaveIm, $Im, $RePosWidth, 0, $PosWidth, 0, $this->CutSize, $this->CutSize);
//3
imagecopy($SaveIm, $Im, 0, $RePosHeight, 0, $PosHeight, $this->CutSize, $this->CutSize);
//4
imagecopy($SaveIm, $Im, $RePosWidth, $RePosHeight, $PosWidth, $PosHeight, $this->CutSize, $this->CutSize);
//상단가운데
imagecopyresampled($SaveIm, $Im, $this->CutSize, 0, $this->CutSize, 0, $RePosWidth2, $this->CutSize, $this->CutSize, $this->CutSize);
//하단가운데
imagecopyresampled($SaveIm, $Im, $this->CutSize, $RePosHeight, $this->CutSize, $PosHeight, $RePosWidth2, $this->CutSize, $this->CutSize, $this->CutSize);
//왼쪽가운데
imagecopyresampled($SaveIm, $Im, 0, $this->CutSize, 0, $this->CutSize, $this->CutSize, $RePosHeight2, $this->CutSize, $this->CutSize);
//오른쪽가운데
imagecopyresampled($SaveIm, $Im, $RePosWidth, $this->CutSize, $PosWidth, $this->CutSize, $this->CutSize, $RePosHeight2, $this->CutSize, $this->CutSize);
//가운데
imagecopyresampled($SaveIm, $Im, $this->CutSize, $this->CutSize, $this->CutSize, $this->CutSize, $RePosWidth2, $RePosHeight2, $this->CutSize, $this->CutSize);
imagedestroy($Im);
return $SaveIm ;
}
//원본 이미지 좌우양쪽을 잘라 버턴으로 만듭니다.
function CreateButton_2W($Img, $Im) {
$Width = ($this->Config['BtnWidth'])?$this->Config['BtnWidth']:$Img['Width'];
$Height = $Img['Height'];
$SaveIm = imagecreatetruecolor($Width, $Height);
$PosWidth = $Img['Width']-$this->CutSize;
$PosHeight = $Img['Height']-$this->CutSize;
$PosWidth2 = $Img['Width']-$this->CutSize*2;
$PosHeight2 = $Img['Height']-$this->CutSize*2;
$RePosWidth = $Width-$this->CutSize;
$RePosHeight = $Height-$this->CutSize;
$RePosWidth2 = $Width-$this->CutSize*2;
$RePosHeight2 = $Height-$this->CutSize*2;
//왼쪽
imagecopy($SaveIm, $Im, 0, 0, 0, 0, $this->CutSize, $Img['Height']);
//오른쪽
imagecopy($SaveIm, $Im, $RePosWidth, 0, $PosWidth, 0, $this->CutSize, $Img['Height']);
//가운데
imagecopyresampled($SaveIm, $Im, $this->CutSize, 0, $this->CutSize, 0, $RePosWidth2, $Img['Height'], $this->CutSize, $Img['Height']);
imagedestroy($Im);
return $SaveIm ;
}
//원본 이미지 상하양쪽을 잘라 버턴으로 만듭니다.
function CreateButton_2H($Img, $Im) {
$Width = $Img['Width'];
$Height = ($this->Config['BtnHeight'])?$this->Config['BtnHeight']:$Img['Height'];
$SaveIm = imagecreatetruecolor($Width, $Height);
$PosWidth = $Img['Width']-$this->CutSize;
$PosHeight = $Img['Height']-$this->CutSize;
$PosWidth2 = $Img['Width']-$this->CutSize*2;
$PosHeight2 = $Img['Height']-$this->CutSize*2;
$RePosWidth = $Width-$this->CutSize;
$RePosHeight = $Height-$this->CutSize;
$RePosWidth2 = $Width-$this->CutSize*2;
$RePosHeight2 = $Height-$this->CutSize*2;
//상단
imagecopy($SaveIm, $Im, 0, 0, 0, 0, $Img['Width'], $this->CutSize);
//하단
imagecopy($SaveIm, $Im, 0, $RePosHeight, 0, $PosHeight, $Img['Width'], $this->CutSize);
//가운데
imagecopyresampled($SaveIm, $Im, 0, $this->CutSize, 0, $this->CutSize, $Img['Width'], $RePosHeight2, $Img['Width'], $this->CutSize);
imagedestroy($Im);
return $SaveIm;
}
//만든 이미지를 저장합니다.
function SaveImg($Img, $SaveIm, $Status) {
$SaveFileName = sprintf("%s/%s_%s.%s", $this->Path, $Img['File']['name'], $Status, $Img['File']['ext']);
if($Img['Type']==1) imagegif($SaveIm, $SaveFileName);
else if($Img['Type']==2) imagejpeg($SaveIm, $SaveFileName, 100);
else if($Img['Type']==3) imagepng($SaveIm, $SaveFileName);
// 메모리에 있는 그림 삭제
imagedestroy($SaveIm);
}
//resource 에 담긴 이미지를 봅니다.
function ImgView($Img, $SaveIm) {
if($Img['Type']==1) imagegif($SaveIm);
else if($Img['Type']==2) imagejpeg($SaveIm, 100);
else if($Img['Type']==3) imagepng($SaveIm);
// 메모리에 있는 그림 삭제
imagedestroy($SaveIm);
}
//저장된 이미지를 봅니다.
function SaveImgView($FileName) {
$NameExt = $this->GetNameExt($FileName);
$FileSize = filesize($FileName);
if(eregi("(MSIE 5.5|MSIE 6.0|MSIE 7.0)", $_SERVER['HTTP_USER_AGENT'])) { // 브라우져 구분
Header("Content-Transfer-Encoding: binary");
} else {
Header("Content-Description: PHP3 Generated Data");
}
Header(sprintf("Content-Type: %s", $NameExt['ext']));
Header(sprintf("Content-Disposition: attachment; filename=%s", $FileName));
Header(sprintf("Content-Length: %s", $FileSize));
Header("Pragma: no-cache");
Header("Expires: 0");
$fp = fopen($FileName, "r");
if(!fpassthru($fp)) fclose($fp);
}
}
'인터넷정보' 카테고리의 다른 글
동적인 다중 select처럼 => 다중 radio 버턴 (라디오버튼) (0) | 2008.02.04 |
---|---|
MS MVP의 IE7 완벽 단축키 63개 (0) | 2008.02.03 |
알아두면 편리한 자판 단축키들(웹서핑용) (0) | 2008.01.05 |
문자열 1바이트씩 배열에 담기 (0) | 2007.12.27 |
백단표,구구단표, 십구단표, 19단 외 각종 유용한 정보 모음... (0) | 2007.12.22 |
PHP Shorthand If / Else Examples (0) | 2007.12.22 |
cron을 사용하지않고 화일 캐쉬 (0) | 2007.12.22 |
[서버운영] Apache mod_gzip 압축 (0) | 2007.12.22 |
[스크립트] 스크립트만으로 움직이는 막대 Chart 그래프 (0) | 2007.12.19 |
[스크립트] 드래그 & 드롭 객체 Drag (0) | 2007.12.19 |