-
-
/** - 이미지 처리 수업
- */
- 클래스 이미지cls
- {
- / **
- * 파일정보
- */
- var $file = array();
- /**
- * 디렉토리 저장
- */
- var $dir = '';
- /**
- * 오류 코드
- */
- var $error_code = 0;
- /**
- * 최대 파일 업로드 크기 KB
- */
- var $max_size = -1;
함수 es_imagecls()
- {
}
-
- 비공개 함수 checkSize($size)
- {
- return !($size > $this->max_size) || (-1 == $this->max_size);
- }
-
- /**
- * 업로드된 파일 처리
- * @param array $file 업로드된 파일
- * @param string $dir 저장된 디렉터리
- * @return bool
- */
- function init($file, $dir = 'temp')
- {
- if(!is_array($file) || 비어 있음($file) || !$this->isUploadFile($file['tmp_name']) || Trim($file['name']) = = '' || $file['size'] == 0)
- {
- $this->file = array();
- $this->error_code = -1;
- return false;
- }
- else
- {
- $file['size'] = intval($file['size']);
- $file['name'] = Trim( $file['name']);
- $file['thumb'] = '';
- $file['ext'] = $this->fileExt($file['name']);
- $file['name'] = htmlspecialchars($file['name'], ENT_QUOTES);
- $file['is_image'] = $this->isImageExt($file['ext']) ;
- $file['file_dir'] = $this->getTargetDir($dir);
- $file['prefix'] = md5(microtime(true)).rand(10,99);
- $file['target'] = "./public/".$file['file_dir'].'/'.$file['prefix'].'.jpg'; //상对
- $file['local_target'] = APP_ROOT_PATH."public/".$file['file_dir'].'/'.$file['prefix'].'.jpg';//물리
- $this->file = &$file;
- $this->error_code = 0;
- return true;
- }
- }
* 파일 저장 - * @return bool
- */
- 함수 save()
- {
- if(empty($this->file) ||empty($this->file['tmp_name']) )
- $this->error_code = -101;
- elseif(!$this->checkSize($this->file['size']))
- $this->error_code = -105;
- elseif(!$this->file['is_image'])
- $this->error_code = -102;
- elseif(!$this->saveFile($this- >file['tmp_name'], $this->file['local_target']))
- $this->error_code = -103;
- elseif($this->file['is_image' ] &&
- (!$this->file['image_info'] = $this->getImageInfo($this->file['local_target'], true)))
- {
- $ this->error_code = -104;
- @unlink($this->file['local_target']);
- }
- else
- {
- $this->error_code = 0;
- true 반환;
- }
- false 반환;
- }
/**
- * 오류 코드 받기
- * @반환 번호
- */
- 함수 오류()
- {
- return $this->error_code;
- }
/**
- * 파일 확장자 가져오기
- * @return 문자열
- */
- function fileExt($file_name)
- {
- return addlashes(strtolower(substr(strrchr($file_name, '.'), 1, 10)));
- }
/**
- * 확장자를 기준으로 파일이 이미지인지 판단
- * @param string $ext Extension
- * @return bool
- */
- function isImageExt($ext)
- {
- static $img_ext = array('jpg', 'jpeg', 'png', 'bmp','gif', 'giff');
- return in_array($ext, $img_ext) ? 1 : 0;
- }
/**
- * 이미지 정보 가져오기
- * @param string $target 파일 경로
- * @return 혼합
- */
- 함수 getImageInfo($target)
- {
- $ext = es_imagecls::fileExt($target);
- $is_image = es_imagecls::isImageExt($ext) ;
if(!$is_image)
- false 반환;
- elseif(!is_readable($target))
- false 반환;
- elseif($image_info = @getimagesize($target))
- {
- list($width, $height, $type) = !empty($image_info) ? $image_info :
- 배열('', '', '');
- $size = $width * $height;
- if($is_image && !in_array($type, array(1,2, 3,6,13)))
- false 반환;
$image_info['type'] =
- strtolower (substr(image_type_to_extension($image_info[2]),1));
- return $image_info;
- }
- else
- return false;
- }
/**
- * 파일 업로드 허용 여부 확인
- * @param string $source 파일 경로
- * @return bool
- */
- 함수 isUploadFile($source)
- {
- return $source && ($source != 'none') &&
- (is_uploaded_file($source) || is_uploaded_file (str_replace('\', '', $source)));
- }
/**
- * 저장된 경로 가져오기
- * @param string $dir 지정된 저장 디렉터리
- * @return string
- */
- function getTargetDir($dir)
- {
- if (!is_dir(APP_ROOT_PATH."public/".$dir)) {
- @mkdir(APP_ROOT_PATH." public/".$dir);
- @chmod(APP_ROOT_PATH."public/".$dir, 0777);
- }
- return $dir;
- }
-
/**
- * 저장 파일
- * @param string $source 소스 파일 경로
- * @param string $target 디렉터리 파일 경로
- * @return bool
- */
- 비공개 함수 saveFile($source, $target)
- {
- if(!es_imagecls::isUploadFile($source))
- $succeed = false;
- elseif(@copy($source, $target))
- $succeed = true;
- elseif(function_exists('move_uploaded_file') &&
- @move_uploaded_file($source, $target))
- $ 성공 = true;
- elseif (@is_readable($source) &&
- (@$fp_s = fopen($source, 'rb')) && (@$fp_t = fopen($target, 'wb')) )
- {
- while (!feof($fp_s))
- {
- $s = @fread($fp_s, 1024 * 512);
- @fwrite($fp_t, $s) ;
- }
- fclose($fp_s);
- fclose($fp_t);
- $succeed = true;
- }
if($succeed)
- {
- $this->error_code = 0;
- @chmod($target, 0644);
- @unlink($source);
- }
- else
- {
- $this->error_code = 0;
- }
return $succeed;
- }
공용 함수 Thumb($image,$maxWidth=200,$maxHeight=50,$gen = 0,
- $interlace=true,$filepath = '',$is_preview = true)
- {
- $info = es_imagecls::getImageInfo($image);
if($info !== false)
- {
- $srcWidth = $info[0];
- $srcHeight = $info[1];
- $type = $info['type'] ;
$인터레이스 = $인터레이스? 1:0;
- 설정 해제($info);
if($maxWidth > 0 && $maxHeight > 0)
- $scale = min($maxWidth/$srcWidth, $maxHeight/$srcHeight);
- // 计算缩放比例
- elseif($maxWidth == 0)
- $scale = $maxHeight/$srcHeight;
- elseif($maxHeight == 0)
- $scale = $maxWidth /$srcWidth;
- $paths = pathinfo($image);
- $paths['filename'] = Trim(strtolower($paths['basename']),
- ".".strtolower($paths['extension) ']));
- $basefilename = 폭발("_",$paths['filename']);
- $basefilename = $basefilename[0];
- if(empty($filepath))
- {
- if($is_preview)
- $thumbname = $paths['dirname'].'/'.$basefilename.
- '_'.$maxWidth.'x'.$maxHeight.' .jpg';
- else
- $thumbname = $paths['dirname'].'/'.$basefilename.
- 'o_'.$maxWidth.'x'.$maxHeight.'.jpg' ;
- }
- else
- $thumbname = $filepath;
$thumburl = str_replace(APP_ROOT_PATH,'./',$thumbname);
-
- if($scale >= 1)
- {
- // 超过하라图大小不再缩略
- $width = $srcWidth;
- $height = $srcHeight;
- if(!$is_preview)
- {
- //비预览模式写入原图
- file_put_contents($thumbname,file_get_contents($image)); //용원원图写入
- return array('url'=>$thumburl,'path'=>$thumbname);
- }
- }
- else
- {
- // 缩略图尺寸
- $width = (int)($srcWidth*$scale);
- $height = (int)($srcHeight*$scale);
- }
-
- if($gen == 1)
- {
- $width = $maxWidth;
- $height = $maxHeight;
- }
// 载入하라图
- $createFun = 'imagecreatefrom'.($type=='jpg'?'jpeg':$type);
- if(!function_exists($createFun))
- $createFun = 'imagecreatefromjpeg';
$srcImg = $createFun($image);
//创建缩略图
- if($type!='gif' && function_exists('imagecreatetruecolor'))
- $thumbImg = imagecreatetruecolor($width, $height);
- else
- $thumbImg = imagecreate($width, $height);
$x = 0;
- $y = 0;
if($gen == 1 && $maxWidth > 0 && $maxHeight > 0)
- {
- $resize_ratio = $maxWidth/$maxHeight;
- $src_ratio = $srcWidth/$srcHeight;
- if($src_ratio >= $resize_ratio)
- {
- $x = ($srcWidth - ($resize_ratio * $srcHeight)) / 2;
- $width = ($height * $srcWidth) / $srcHeight;
- }
- else
- {
- $y = ($srcHeight - ((1 / $resize_ratio) * $srcWidth)) / 2;
- $height = ($width * $srcHeight) / $srcWidth;
- }
- }
// 复 제조사 사진
- if(function_exists("imagecopyresampled"))
- imagecopyresampled($thumbImg, $srcImg, 0, 0, $x, $y, $width, $height,
- $srcWidth,$ srcHeight);
- else
- imagecopyreized($thumbImg, $srcImg, 0, 0, $x, $y, $width, $height,
- $srcWidth,$srcHeight);
- if(' gif'==$type || 'png'==$type) {
- $Background_color = imagecolorallocate($thumbImg, 0,255,0); // 指派一个绿color
- imagecolortransparent($thumbImg,$Background_color);
- // 设置为透明color,若注释掉该行则输流绿color的图
- }
// 对jpeg图shape设置隔行扫描
- if('jpg'==$type || 'jpeg'==$type)
- imageinterlace($thumbImg,$interlace);
-
// 생성그림
- imagejpeg($thumbImg,$thumbname,100);
- imagedestroy($thumbImg);
- imagedestroy($srcImg);
return array('url'=>$thumburl,'path'=>$thumbname);
- }
- return false;
- }
공개 함수 make_thumb($srcImg,$srcWidth,$srcHeight,$type,$maxWidth=200,
- $maxHeight=50,$gen = 0)
- {
$인터레이스 = $인터레이스? 1:0;
if($maxWidth > 0 && $maxHeight > 0)
- $scale = min($maxWidth/$srcWidth, $maxHeight/$srcHeight);
- // 计算缩放比例
- elseif($maxWidth == 0)
- $scale = $maxHeight/$srcHeight;
- elseif($maxHeight == 0)
- $scale = $maxWidth/$srcWidth;
= 1)
- {
- // 超过하라图大小不再缩略
- $width = $srcWidth;
- $height = $srcHeight;
- }
- else
- {
- // 缩略图尺寸
- $width = (int)($srcWidth*$scale);
- $height = (int)($srcHeight*$scale);
- }
if($gen == 1)
- {
- $width = $maxWidth;
- $height = $maxHeight;
- }
- / /创建缩略图
- if($type!='gif' && function_exists('imagecreatetruecolor'))
- $thumbImg = imagecreatetruecolor($width, $height);
- else
- $thumbImg = imagecreatetruecolor ($너비, $높이);
$x = 0;
- $y = 0;
if($gen == 1 && $maxWidth > 0 && $maxHeight > 0)
- {
- $resize_ratio = $maxWidth/$maxHeight;
- $src_ratio = $srcWidth/$srcHeight;
- if($src_ratio >= $resize_ratio)
- {
- $x = ($srcWidth - ($resize_ratio * $srcHeight)) / 2;
- $width = ($height * $srcWidth) / $srcHeight;
- }
- else
- {
- $y = ($srcHeight - ((1 / $resize_ratio) * $srcWidth)) / 2;
- $height = ($width * $srcHeight) / $srcWidth;
- }
- }
// 이미지 복사
- if(function_exists("imagecopyresampled"))
- imagecopyresampled($thumbImg, $srcImg, 0, 0, $x, $y, $ 너비, $height,
- $srcWidth,$srcHeight);
- else
- imagecopyreized($thumbImg, $srcImg, 0, 0, $x, $y, $width, $height,
- $ srcWidth,$srcHeight);
- if('gif'==$type || 'png'==$type) {
- $Background_color = imagecolorallocate($thumbImg, 255,255,255)
- // 할당 Green
- imagecolortransparent($thumbImg,$Background_color)
- // 투명색으로 설정, 이 줄을 주석 처리하면 녹색 이미지가 출력됩니다.
- }
- < p> / / JPEG 그래픽에 대한 인터레이스 설정
- if('jpg'==$type || 'jpeg'==$type)
- imageinterlace($thumbImg,$interlace);
- < ;p> return $thumbImg;
-
}
-
- 공개 함수 water($source,$water,$alpha=80,$position=" 0" )
- {
- //파일이 존재하는지 확인
- if(!file_exists($source)||!file_exists($water))
- return false;
//이미지 정보
- $sInfo = es_imagecls::getImageInfo($source);
- $wInfo = es_imagecls::getImageInfo($water);
- if($sInfo["0"] < $wInfo["0"] || $sInfo['1'] < $wInfo['1'])
- return false;
-
- if(is_animated_gif($source))
- {
- require_once APP_ROOT_PATH. "system/utils/gif_encoder.php" ;
- require_once APP_ROOT_PATH."system/utils/gif_reader.php";
$gif = new GIFReader();
- $ gif->load($source) ;
- foreach($gif->IMGS['frames'] as $k=>$img)
- {
- $im = imagecreatefromstring($gif- >getgif($k));
- //im에 워터마크 추가
- $sImage=$im
- $wCreateFun="imagecreatefrom".$wInfo['type'];
- if( !function_exists($wCreateFun))
- $wCreateFun = 'imagecreatefromjpeg';
- $wImage=$wCreateFun($water);
-
- //이미지 블렌딩 모드 설정
- imagealphablending($wImage , true)
- 스위치 (intval($position))
- {
- 사례 0: 중단;
- //왼쪽 상단
- 사례 1:
- $posY=0;
- $posX=0;
- //혼합 이미지 생성
- imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha) ;
- break;
- //오른쪽 위
- 사례 2:
- $posY=0;
- $posX=$sInfo[0]-$wInfo[0];
- // 혼합 이미지 생성
- imagecopymerge($sImage , $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha);
- break;
- // 왼쪽 하단
- 사례 3:
- $posY=$sInfo[1]-$wInfo[1];
- $posX=0;
- //혼합 이미지 생성
- imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha);
- break;
- //오른쪽 아래
- 사례 4:
- $posY=$sInfo[1]-$wInfo [1];
- $posX=$sInfo[0]-$wInfo[0];
- //혼합 이미지 생성
- imagecopymerge($sImage, $ wImage, $posX, $posY, 0, 0 , $wInfo[0],$wInfo[1],$alpha);
- break;
- //중앙
- 사례 5:
- $posY =$sInfo[1]/2-$wInfo [1]/2;
- $posX=$sInfo[0]/2-$wInfo[0]/2;
- //혼합 이미지 생성
- imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha);
- break;
- }
- //end im 워터마크 있음
-
-
- ob_start();
- imagegif($sImage);
- $content = ob_get_contents();
- ob_end_clean();
- $frames [ ] = $content ;
- $framed [ ] = $ img['frameDelay'];
- }
-
-
- $gif_maker = 새 GIFEncoder(
- $frames,
- $framed,
- 0,
- 2,
- 0, 0, 0,
- "bin" //bin은 바이너리 URL입니다.
- );
- $image_rs = $gif_maker->GetAnimation ( );
-
- //저장 파일 이름을 지정하지 않으면 기본값은 원본 이미지 이름입니다.
- @unlink($source);
- //이미지 저장
- file_put_contents($ 소스,$image_rs);
- true를 반환합니다.
- }
-
- //이미지 생성
- $sCreateFun="imagecreatefrom".$sInfo['type'];
- if(!function_exists($sCreateFun))
- $sCreateFun = 'imagecreatefromjpeg';
- $sImage=$sCreateFun($source);
$wCreateFun="imagecreatefrom".$wInfo['type'];
- if(!function_exists($wCreateFun ))
- $wCreateFun = 'imagecreatefromjpeg';
- $wImage=$wCreateFun($water);
//이미지 블렌딩 모드 설정
- imagealphablending( $ wImage, true);
스위치 (intval($position))
- {
- 사례 0: 중단;
- //왼쪽 위
- 사례 1:
- $posY=0;
- $posX=0;
- //혼합 이미지 생성
- imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0] ,$wInfo[1],$alpha);
- break;
- //오른쪽 위
- 사례 2:
- $posY=0;
- $posX=$sInfo[0]-$ wInfo [0];
- //혼합 이미지 생성
- imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha);
- break;
- //왼쪽 아래
- 사례 3:
- $posY=$sInfo[1]-$wInfo[1];
- $posX=0;
- //생성 혼합 이미지
- imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha);
- break;
- //하단 오른쪽
- 사례 4:
- $posY=$sInfo[1]-$wInfo[1];
- $posX=$sInfo[0]-$wInfo[0];
- //혼합 생성 image
- imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha);
- break;
- //중앙
- 사례 5:
- $posY=$sInfo[1]/2-$wInfo[1]/2;
- $posX=$sInfo[0]/2-$wInfo[0]/2;
- //혼합 이미지 생성
- imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha);
- break;
- }
//저장 파일 이름이 지정되지 않은 경우 기본값은 원본 이미지 이름입니다.
- @unlink($source);
- //이미지 저장
- imagejpeg( $sImage,$source,100);
- imagedestroy($sImage);
- }
- }
if(!function_exists('image_type_to_extension) '))
- {
- function image_type_to_extension($imagetype)
- {
- if(empty($imagetype))
- return false;
($imagetype)
- {
- 사례 IMAGETYPE_GIF : '.gif' 반환;
- 사례 IMAGETYPE_JPEG : '.jpeg' 반환;
- 사례 IMAGETYPE_PNG : '.png' 반환;
- 사례 IMAGETYPE_SWF : return '.swf' ;
- 사례 IMAGETYPE_PSD : '.psd' 반환;
- 사례 IMAGETYPE_BMP : '.bmp' 반환;
- 사례 IMAGETYPE_TIFF_II : '.tiff' 반환;
- 사례 IMAGETYPE_TIFF_MM : ' 반환 .tiff';
- 사례 IMAGETYPE_JPC : '.jpc' 반환;
- 사례 IMAGETYPE_JP2 : '.jp2' 반환;
- 사례 IMAGETYPE_JPX : '.jpf' 반환;
- 사례 IMAGETYPE_JB2 : '.jb2 반환 ';
- 사례 IMAGETYPE_SWC : '.swc' 반환;
- 사례 IMAGETYPE_IFF : '.aiff' 반환;
- 사례 IMAGETYPE_WBMP : '.wbmp' 반환;
- 사례 IMAGETYPE_XBM : '.xbm' 반환;
- 기본값 : false 반환;
- }
- }
- }
- ?>
-
코드 복사
2.get_spec_img()는 이미지 클래스를 호출한 후 다음 메소드를 사용하여 서로 다른 사양의 이미지를 저장하고 이미지 연결을 반환합니다.
-
- //해당 사양의 이미지 주소를 가져옵니다.
- //gen=0: 스케일링 비율을 유지하고 예를 들어 높이가 0이면 너비가 비례적으로 조정됩니다. gen=1: 길이와 너비가 보장되고 잘립니다.
- function get_spec_image($img_path,$width=0,$height=0 ,$gen=0,$is_preview=true)
- {
- if($width==0)
- $new_path = $img_path;
- else
- {
- $img_name = substr ($img_path,0,-4);
- $img_ext = substr($img_path,-3);
- if($is_preview)
- $new_path = $img_name."_".$width." x".$height.".jpg";
- else
- $new_path = $img_name."o_".$width."x".$height.".jpg";
- if(!file_exists ($new_path))
- {
- require_once "imagecls.php";
- $imagec = 새 imagecls();
- $thumb = $imagec->thumb($img_path,$width,$ height,$gen,true,"
- ", $is_preview);
-
- if(app_conf("PUBLIC_DOMAIN_ROOT")!='')
- {
- $paths = pathinfo($new_path );
- $path = str_replace("./ ","",$paths['dirname']);
- $filename = $paths['basename'];
- $pathwithoupublic = str_replace(" public/","",$path);
-
- $file_data = @file_get_contents($path.$file);
- $img = @imagecreatefromstring($file_data);
- if($img !==false)
- {
- $ save_path = "public/".$path;
- if(!is_dir($save_path))
- 이름,$file_data);
- }
- }
-
- }
- }
- return $new_path;
- }
-
-
- 코드 복사
3.
//im: 매장 이미지를 3가지 사양으로 저장: 소형 이미지: 48x48, 중형 이미지 120x120, 대형 이미지 200x200 $small_url=get_spec_image($ data['image'],48,48,0);- $
- middle_url =get_spec_image($data['image'],120,120,0);
- $big_url=get_spec_image($data['image'],200,200,0);
-
-
- 코드 복사
|