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=70) { $this->quality = $quality; } function rotate($angle) { $this->rotation_angle = $angle; } 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); // Apply rotation if specified if(isset($this->rotation_angle) && $this->rotation_angle != 0) { $new_image = imagerotate($new_image, $this->rotation_angle, 0); } $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); } } // // 파일 압축 메소드 수정 function compress_image($source, $destination, $quality) { $info = getimagesize($source); if ($info['mime'] == 'image/jpeg') { $image = imagecreatefromjpeg($source); } elseif ($info['mime'] == 'image/gif') { $image = imagecreatefromgif($source); } elseif ($info['mime'] == 'image/png') { $image = imagecreatefrompng($source); } elseif ($info['mime'] == 'image/x-ms-bmp') { $image = imagecreatefrombmp($source); } else { return false; // 지원하지 않는 파일 형식 } // 압축된 파일 저장 imagejpeg($image, $destination, $quality); // 크기 조정 (최대 800px) list($width, $height) = getimagesize($destination); if ($width > 800 || $height > 800) { $rate = $width / $height; if ($width > $height) { $new_width = 800; $new_height = 800 / $rate; } else { $new_width = 800 * $rate; $new_height = 800; } // `Image` 클래스를 사용해 크기 조정 $imageObj = new Image($destination); $imageObj->width($new_width); $imageObj->height($new_height); $imageObj->save(false); // 파일을 다시 저장 } return $destination; // 최종 파일 경로 반환 } ?>