>  기사  >  백엔드 개발  >  PHP는 다양한 크기의 앱 로고 일괄 생성을 구현합니다_php 팁

PHP는 다양한 크기의 앱 로고 일괄 생성을 구현합니다_php 팁

WBOY
WBOY원래의
2016-05-16 20:20:051026검색

사용하기 쉬운 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;
반환 }
}

이 글의 내용은 여기까지입니다. 모두 마음에 드셨으면 좋겠습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.