php图片处理:缩略,裁剪,圆角
<? /* 图片处理类:缩略,裁剪,圆角,倾斜 */ class resizeimage { //图片类型 var $type; //实际宽度 var $width; //实际高度 var $height; //改变后的宽度 var $resize_width; //改变后的高度 var $resize_height; //是否裁图 var $cut; //源图象 var $srcimg; //目标图象地址 var $dstimg; //圆角源 var $corner; var $im; function resizeimage($img, $outimg, $corner, $wid, $hei, $c, $corner_radius, $angle) { $this->srcimg = $img; $this->dstimg = $outimg; $this->corner = $corner; $this->resize_width = $wid; $this->resize_height = $hei; $this->cut = $c; $this->corner_radius = $corner_radius; $this->angle = $angle; //图片的类型 $this->type = substr(strrchr($this->srcimg, "."), 1); //初始化图象 $this->initi_img(); //-- $this->width = imagesx($this->im); $this->height = imagesy($this->im); //生成图象 $this->newimg(); ImageDestroy($this->im); } function newimg() { //改变后的图象的比例 $resize_ratio = ($this->resize_width) / ($this->resize_height); //实际图象的比例 $ratio = ($this->width) / ($this->height); if (($this->cut) == "1") //裁图 { if ($ratio >= $resize_ratio) //高度优先 { $newimg = imagecreatetruecolor($this->resize_width, $this->resize_height); imagecopyresampled($newimg, $this->im, 0, 0, 0, 0, $this->resize_width, $this->resize_height, (($this->height) * $resize_ratio), $this->height); $tmp = $this->rounded_corner($newimg, $this->resize_width); imagepng($tmp, $this->dstimg); } if ($ratio < $resize_ratio) //宽度优先 { $newimg = imagecreatetruecolor($this->resize_width, $this->resize_height); imagecopyresampled($newimg, $this->im, 0, 0, 0, 0, $this->resize_width, $this->resize_height, $this->width, (($this->width) / $resize_ratio)); $tmp = $this->rounded_corner($newimg); imagepng($tmp, $this->dstimg); } } else //不裁图 { if ($ratio >= $resize_ratio) { $newimg = imagecreatetruecolor($this->resize_width, ($this->resize_width) / $ratio); imagecopyresampled($newimg, $this->im, 0, 0, 0, 0, $this->resize_width, ($this->resize_width) / $ratio, $this->width, $this->height); ImageJpeg($newimg, $this->dstimg); } if ($ratio < $resize_ratio) { $newimg = imagecreatetruecolor(($this->resize_height) * $ratio, $this->resize_height); imagecopyresampled($newimg, $this->im, 0, 0, 0, 0, ($this->resize_height) * $ratio, $this->resize_height, $this->width, $this->height); ImageJpeg($newimg, $this->dstimg); } } } //初始化图象 function initi_img() { if ($this->type == "jpg") { $this->im = imagecreatefromjpeg($this->srcimg); } if ($this->type == "gif") { $this->im = imagecreatefromgif($this->srcimg); } if ($this->type == "png") { $this->im = imagecreatefrompng($this->srcimg); } } //处理圆角 function rounded_corner($image, $size) { $topleft = true; $bottomleft = true; $bottomright = true; $topright = true; $corner_source = imagecreatefrompng($this->corner); $corner_width = imagesx($corner_source); $corner_height = imagesy($corner_source); $corner_resized = ImageCreateTrueColor($this->corner_radius, $this->corner_radius); ImageCopyResampled($corner_resized, $corner_source, 0, 0, 0, 0, $this->corner_radius, $this->corner_radius, $corner_width, $corner_height); $corner_width = imagesx($corner_resized); $corner_height = imagesy($corner_resized); $white = ImageColorAllocate($image, 255, 255, 255); $black = ImageColorAllocate($image, 0, 0, 0); //顶部左圆角 if ($topleft == true) { $dest_x = 0; $dest_y = 0; imagecolortransparent($corner_resized, $black); imagecopymerge($image, $corner_resized, $dest_x, $dest_y, 0, 0, $corner_width, $corner_height, 100); } //下部左圆角 if ($bottomleft == true) { $dest_x = 0; $dest_y = $size - $corner_height; $rotated = imagerotate($corner_resized, 90, 0); imagecolortransparent($rotated, $black); imagecopymerge($image, $rotated, $dest_x, $dest_y, 0, 0, $corner_width, $corner_height, 100); } //下部右圆角 if ($bottomright == true) { $dest_x = $size - $corner_width; $dest_y = $size - $corner_height; $rotated = imagerotate($corner_resized, 180, 0); imagecolortransparent($rotated, $black); imagecopymerge($image, $rotated, $dest_x, $dest_y, 0, 0, $corner_width, $corner_height, 100); } //顶部右圆角 if ($topright == true) { $dest_x = $size - $corner_width; $dest_y = 0; $rotated = imagerotate($corner_resized, 270, 0); imagecolortransparent($rotated, $black); imagecopymerge($image, $rotated, $dest_x, $dest_y, 0, 0, $corner_width, $corner_height, 100); } $image = imagerotate($image, $this->angle, $white); return $image; } } //resizeimage("图片地址", "图片保存地址", "圆角源", "处理后的宽度", "处理后的高度", "是否裁剪", "圆角度数", "倾斜度"); $img_file = 'Sunset.jpg'; $imgout_file = 'xxx.jpg'; $corner = 'rounded_corner.png'; $resizeimage = new resizeimage($img_file, $imgout_file, $corner, "80", "80", "1", "6", "0"); ?>