사용하기 쉬운 PHP GD를 사용하고, 한 번의 클릭으로 다양한 크기를 잘라서 패키지하고 다운로드할 수 있습니다. 아이콘을 자주 바꾸는 분들은 아실텐데, 아티스트가 1024 로고를 주고, 다양한 크기로 포토샵을 해야 해서 이런 걸 생각해냈습니다.
핵심코드
수업 이미지 {
/**
* 원본이미지
*
* @var 문자열|배열
*/
비공개 $source;
/**
*임시이미지
*
* @var 파일
*/
비공개 $image;
비공개 $ext;
/**
* 오류
*
* @var 배열
*/
비공개 $error;
/**
* 구성
*
* @param 문자열|배열 $source
*/
공개 함수 __construct($source = NULL) {
if($source != NULL) {
$this->source($source);
}
}
/**
* 원본 이미지 설정
*
* @param 문자열|배열 $source
*/
공개 함수 소스($source) {
if(!is_array($source)) {
$this->source["name"] = $source;
$this->source["tmp_name"] = $source;
$유형 = NULL;
$ext = strtolower(end(explode(".",$source)));
스위치($ext) {
케이스 "jpg" :
케이스 "jpeg" : $type = "image/jpeg"; 휴식;
케이스 "gif" : $type = "image/gif"; 휴식;
케이스 "png" : $type = "image/png"; 휴식;
}
$this->source["type"] = $type;
} 그 밖의 {
$this->source = $source;
}
$this->destination = $this->source["name"];
}
/**
* 이미지 크기 조정
*
* @param int $width
* @param int $height
*/
공개 함수 크기 조정($width = NULL,$height = NULL) {
if(isset($this->source["tmp_name"]) && file_exists($this->source["tmp_name"])) {
list($source_width,$source_height) = getimagesize($this->source["tmp_name"]);
if(($width == NULL) && ($height != NULL)) {
$width = ($source_width * $height) / $source_height;
}
if(($width != NULL) && ($height == NULL)) {
$height = ($source_height * $width) / $source_width;
}
if(($width == NULL) && ($height == NULL)) {
$width = $source_width;
$높이 = $source_height;
}
스위치($this->source["type"]) {
case "image/jpeg" : $created = imagecreatefromjpeg($this->source["tmp_name"]); 휴식;
케이스 "image/gif" : $created = imagecreatefromgif($this->source["tmp_name"]); 휴식;
case "image/png" : $created = imagecreatefrompng($this->source["tmp_name"]); 휴식;
}
$this->image = imagecreatetruecolor($width,$height);
imagecopyresampled($this->image,$created,0,0,0,0,$width,$height,$source_width,$source_height);
}
}
/**
* 이미지에 워터마크 추가
*
* @param 문자열 $mark
* @param int $opac
* @param int $x_pos
* @param int $y_pos
*/
공개 함수 워터마크($mark,$opac,$x_pos,$y_pos) {
if(file_exists($mark) && ($this->image != "")) {
$ext = strtolower(end(explode(".",$mark)));
스위치($ext) {
케이스 "jpg" :
케이스 "jpeg" : $watermark = imagecreatefromjpeg($mark); 휴식;
케이스 "gif" : $watermark = imagecreatefromgif($mark); 휴식;
케이스 "png" : $watermark = imagecreatefrompng($mark); 휴식;
}
list($watermark_width,$watermark_height) = getimagesize($mark);
$source_width = 이미지x($this->image);
$source_height = 이미지($this->image);
if($x_pos == "상단") $pos = "t"; else $pos = "b";
if($y_pos == "왼쪽") $pos .= "l"; else $pos .= "r";
$dest_x = 0;
$dest_y = 0;
스위치($pos) {
케이스 "tr" : $dest_x = $source_width - $watermark_width; 휴식;
케이스 "bl" : $dest_y = $source_height - $watermark_height; 휴식;
케이스 "br" : $dest_x = $source_width - $watermark_width; $dest_y = $source_height - $watermark_height; 휴식;
}
imagecopymerge($this->이미지,$watermark,$dest_x,$dest_y,0,0,$watermark_width,$watermark_height,$opac);
}
}
/**
* 이미지 자르기
*
* @param int $x
* @param int $y
* @param int $width
* @param int $height
*/
공용 함수 자르기($x,$y,$width,$height) {
if(isset($this->source["tmp_name"]) && file_exists($this->source["tmp_name"]) && ($width > 10) && ($height > 10)) {
스위치($this->source["type"]) {
case "image/jpeg" : $created = imagecreatefromjpeg($this->source["tmp_name"]); 휴식;
케이스 "image/gif" : $created = imagecreatefromgif($this->source["tmp_name"]); 휴식;
case "image/png" : $created = imagecreatefrompng($this->source["tmp_name"]); 휴식;
}
$this->image = imagecreatetruecolor($width,$height);
imagecopy($this->image,$created,0,0,$x,$y,$width,$height);
}
}
/**
* 최종 이미지 파일 생성
*
* @param 문자열 $destination
* @param int $quality
*/
공개 함수 생성($destination,$quality = 100) {
if($this->image != "") {
$extension = substr($destination,-3,3);
스위치($extension) {
케이스 "gif":
imagegif($this->image,$destination,$quality);
휴식;
케이스 "png":
$quality = ceil($quality/10) - 1;
imagepng($this->image,$destination,$quality);
휴식;
기본값 :
imagejpeg($this->image,$destination,$quality);
휴식;
}
}
}
/**
* 연장이 유효한지 확인하세요
*
*/
공개 함수 verify_extension() {
if(isset($this->source["tmp_name"]) && file_exists($this->source["tmp_name"])) {
$exts = array("이미지/jpeg", "이미지/pjpeg", "이미지/png", "이미지/x-png");
$ext = $this->source["type"];
$유효 = 0;
$this->ext = '.not_found';
if ($ext == $exts[0] || $ext == $exts[1]) {
$유효 = 1;
$this->ext = '.jpg';
}
// if ($ext == $exts[2]) {
// $valid = 1;
// $this->ext = '.gif';
// }
if ($ext == $exts[2] || $ext == $exts[3]) {
$유효 = 1;
$this->ext = '.png';
}
if($valid != 1) {
$this->error .= "확장자";
}
} 그 밖의 {
$this->error .= "소스";
}
}
/**
*사이즈가 맞는지 확인하세요
*
* @param int $max
*/
공개 함수 verify_size($max) {
if(isset($this->source["tmp_name"]) && file_exists($this->source["tmp_name"])) {
$max = $max * 1024;
if($this->source["size"] >= $max) {
$this->error .= "크기";
}
} 그 밖의 {
$this->error .= "소스";
}
}
/**
* 치수가 맞는지 확인하세요
*
* @param int $limit_width
* @param int $limit_height
*/
공개 함수 verify_dimension($limit_width,$limit_height) {
if(isset($this->source["tmp_name"]) && file_exists($this->source["tmp_name"])) {
list($source_width,$source_height) = getimagesize($this->source["tmp_name"]);
if(($source_width > $limit_width) || ($source_height > $limit_height)) {
$this->error .= "차원";
}
} 그 밖의 {
$this->error .= "소스";
}
}
/**
* 발견된 오류를 가져옵니다
*
*/
공개 함수 오류() {
$error = 배열();
if(stristr($this->error,"source")) $error[] = "불가한 문자";
if(stristr($this->error,"dimension")) $error[] = "上传图文尺寸大大";
if(stristr($this->error,"extension")) $error[] = "합의가 불가능합니다";
if(stristr($this->error,"size")) $error[] = "图文文件大大";
$error를 반환합니다.
}
공개 함수 error_string() {
$오류 = "";
if(stristr($this->error,"source")) $error .= "找不到上传文件 / ";
if(stristr($this->error,"dimension")) $error .= "上传图文尺寸大大 / ";
if(stristr($this->error,"extension")) $error .= "불합리한 내용 / ";
If (STRISTR ($ this- & gt; error, "size")) $ error. = "사진 파일이 너무 큽니다."
If(eregi(" / $", $error)) {
$error = substr($error, 0, -3);
}
$error를 반환합니다.
}
공개 함수 ext() {
$this->ext;
반환
}
}
이 글의 내용은 여기까지입니다. 모두 마음에 드셨으면 좋겠습니다.