728x90
개발작업을 하다보면, 게시판에 썸네일이나 서버의 용량제한 및 관리, 이미지 크기 규격화 등 여러가지의 이유로 사용자가 업로드한 이미지를 리사이징 해야 하는 경우가 발생합니다. 오늘은 PHP로 이미지 정보를 리사이징 하는 예제를 보여드리겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | <? class Image { var $file; var $image_width; var $image_height; var $width; var $height; var $ext; var $types = array('','gif','jpeg','png','swf'); var $quality = 80; var $top = 0; var $left = 0; var $crop = false; var $type; function Image($name='') { $this->file = $name; $info = getimagesize($name); $this->image_width = $info[0]; $this->image_height = $info[1]; $this->type = $this->types[$info[2]]; $info = pathinfo($name); $this->dir = $info['dirname']; $this->name = str_replace('.'.$info['extension'], '', $info['basename']); $this->ext = $info['extension']; } function dir($dir='') { if(!$dir) return $this->dir; $this->dir = $dir; } function name($name='') { if(!$name) return $this->name; $this->name = $name; } function width($width='') { $this->width = $width; } function height($height='') { $this->height = $height; } function resize($percentage=50) { if($this->crop) { $this->crop = false; $this->width = round($this->width*($percentage/100)); $this->height = round($this->height*($percentage/100)); $this->image_width = round($this->width/($percentage/100)); $this->image_height = round($this->height/($percentage/100)); } else { $this->width = round($this->image_width*($percentage/100)); $this->height = round($this->image_height*($percentage/100)); } } function crop($top=0, $left=0) { $this->crop = true; $this->top = $top; $this->left = $left; } function quality($quality=80) { $this->quality = $quality; } function show() { $this->save(true); } function save($show=false) { if($show) @header('Content-Type: image/'.$this->type); if(!$this->width && !$this->height) { $this->width = $this->image_width; $this->height = $this->image_height; } elseif (is_numeric($this->width) && empty($this->height)) { $this->height = round($this->width/($this->image_width/$this->image_height)); } elseif (is_numeric($this->height) && empty($this->width)) { $this->width = round($this->height/($this->image_height/$this->image_width)); } else { if($this->width<=$this->height) { $height = round($this->width/($this->image_width/$this->image_height)); if($height!=$this->height) { $percentage = ($this->image_height*100)/$height; $this->image_height = round($this->height*($percentage/100)); } } else { $width = round($this->height/($this->image_height/$this->image_width)); if($width!=$this->width) { $percentage = ($this->image_width*100)/$width; $this->image_width = round($this->width*($percentage/100)); } } } if($this->crop) { $this->image_width = $this->width; $this->image_height = $this->height; } if($this->type=='jpeg') $image = imagecreatefromjpeg($this->file); if($this->type=='png') $image = imagecreatefrompng($this->file); if($this->type=='gif') $image = imagecreatefromgif($this->file); $new_image = imagecreatetruecolor($this->width, $this->height); imagecopyresampled($new_image, $image, 0, 0, $this->top, $this->left, $this->width, $this->height, $this->image_width, $this->image_height); $name = $show ? null: $this->dir.DIRECTORY_SEPARATOR.$this->name.'.'.$this->ext; if($this->type=='jpeg') imagejpeg($new_image, $name, $this->quality); if($this->type=='png') imagepng($new_image, $name); if($this->type=='gif') imagegif($new_image, $name); imagedestroy($image); imagedestroy($new_image); } } /* 사용방법 $re_image = new Image(이미지 파일명); $re_image -> width(200); $re_image -> height(300); $re_image -> save(); */ ?> | cs |
상세한 소스 설명은 따로 하지 않겠습니다. 댓글남겨 주시면 답변으로 드리겠습니다.
위에 사용방법에 나와있는 width, height, save 외에도 안에 여러 함수들이 있습니다.
품질을 정하는 quality도 있고, 리사이징 된 이미지를 바로 보여주는 show도 있습니다.
먼저 클래스 선언 시 리사이징 할 이미지의 파일이름을 넣어 주시고, 리사이징할 가로값 세로값을 입력하고 마지막에 save를 합니다.
save시 같은 경로에 저장이 되니 꼭 확인 해야 합니다.
'개발이야기 > PHP' 카테고리의 다른 글
Error, Warning 안나오게 하기 (에러, 경고) (0) | 2018.11.23 |
---|---|
curl을 이용하여 post, get 방식 으로 데이터 전송하기 (0) | 2018.02.13 |
우분투(Ubuntu) 에서 PHP 설치 하기 (0) | 2018.02.08 |
PHP로 압축파일(Zip)파일을 만들어 보자 (3) | 2018.02.07 |
PHP 시간, 날짜 함수의 모든 것 (0) | 2018.02.05 |