반응형
<?
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();
*/
?>
반응형
'PHP' 카테고리의 다른 글
php 메일 발송하기 (0) | 2021.04.28 |
---|---|
curl을 이용하여 post, get 방식 으로 데이터 전송하기 (0) | 2021.04.28 |
PHP ZIP 압축파일 만들기 (0) | 2021.04.28 |
ereg(), eregi(), ereg_replace(), eregi_replace(), split() 대체 (0) | 2020.08.29 |
Zendguard loader 버전별 설치파일 (0) | 2020.06.19 |
댓글