<?php
// ------------------------------------------------------------------------
// 程序功能:用户选择缩放和裁剪位置,裁剪后自动保存成大图和中图和小图,一般用于网站头像设置
// 作者:徐风 (QQ:377653)
// http://www.jieqi.com/
// ------------------------------------------------------------------------
$imgresize = new ImageResize(); //创建图片缩放和裁剪类
$imgresize->load('source.jpg'); //载入原始图片
$posary=explode(',', $_REQUEST['cut_pos']);
foreach($posary as $k=>$v) $posary[$k]=intval($v); //获得缩放比例和裁剪位置
if($posary[2]>0 && $posary[3]>0) $imgresize->resize($posary[2], $posary[3]); //图片缩放
//保存120*120的大图
$imgresize->cut(120, 120, intval($posary[0]), intval($posary[1]));
$imgresize->save('l.jpg');
//保存48*48的中图
$imgresize->resize(48, 48);
$imgresize->save('m.jpg');
//保存16*16的小图
$imgresize->resize(16, 16);
$imgresize->save('s.jpg', true);
header('Location: index.html');
//--------------------------------------------------------
/**
* 图片缩放和裁剪类
*/
class ImageResize
{
//源图象
var $_img;
//图片类型
var $_imagetype;
//实际宽度
var $_width;
//实际高度
var $_height;
//载入图片
function load($img_name, $img_type=''){
if(!empty($img_type)) $this->_imagetype = $img_type;
else $this->_imagetype = $this->get_type($img_name);
switch ($this->_imagetype){
case 'gif':
if (function_exists('imagecreatefromgif')) $this->_img=imagecreatefromgif($img_name);
break;
case 'jpg':
$this->_img=imagecreatefromjpeg($img_name);
break;
case 'png':
$this->_img=imagecreatefrompng($img_name);
break;
default:
$this->_img=imagecreatefromstring($img_name);
break;
}
$this->getxy();
}
//缩放图片
function resize($width, $height, $percent=0)
{
if(!is_resource($this->_img)) return false;
if(empty($width) && empty($height)){
if(empty($percent)) return false;
else{
$width = round($this->_width * $percent);
$height = round($this->_height * $percent);
}
}elseif(empty($width) && !empty($height)){
$width = round($height * $this->_width / $this->_height );
}else{
$height = round($width * $this->_height / $this->_width);
}
$tmpimg = imagecreatetruecolor($width,$height);
if(function_exists('imagecopyresampled')) imagecopyresampled($tmpimg, $this->_img, 0, 0, 0, 0, $width, $height, $this->_width, $this->_height);
else imagecopyresized($tmpimg, $this->_img, 0, 0, 0, 0, $width, $height, $this->_width, $this->_height);
$this->destroy();
$this->_img = $tmpimg;
$this->getxy();
}
//裁剪图片
function cut($width, $height, $x=0, $y=0){
if(!is_resource($this->_img)) return false;
if($width > $this->_width) $width = $this->_width;
if($height > $this->_height) $height = $this->_height;
if($x < 0) $x = 0;
if($y < 0) $y = 0;
$tmpimg = imagecreatetruecolor($width,$height);
imagecopy($tmpimg, $this->_img, 0, 0, $x, $y, $width, $height);
$this->destroy();
$this->_img = $tmpimg;
$this->getxy();
}
//显示图片
function display($destroy=true)
{
if(!is_resource($this->_img)) return false;
switch($this->_imagetype){
case 'jpg':
case 'jpeg':
header("Content-type: image/jpeg");
imagejpeg($this->_img);
break;
case 'gif':
header("Content-type: image/gif");
imagegif($this->_img);
break;
case 'png':
default:
header("Content-type: image/png");
imagepng($this->_img);
break;
}
if($destroy) $this->destroy();
}
//保存图片 $destroy=true 是保存后销毁图片变量,false这不销毁,可以继续处理这图片
function save($fname, $destroy=false, $type='')
{
if(!is_resource($this->_img)) return false;
if(empty($type)) $type = $this->_imagetype;
switch($type){
case 'jpg':
case 'jpeg':
$ret=imagejpeg($this->_img, $fname);
break;
case 'gif':
$ret=imagegif($this->_img, $fname);
break;
case 'png':
default:
$ret=imagepng($this->_img, $fname);
break;
}
if($destroy) $this->destroy();
return $ret;
}
//销毁图像
function destroy()
{
if(is_resource($this->_img)) imagedestroy($this->_img);
}
//取得图像长宽
function getxy()
{
if(is_resource($this->_img)){
$this->_width = imagesx($this->_img);
$this->_height = imagesy($this->_img);
}
}
//获得图片的格式,包括jpg,png,gif
function get_type($img_name)//获取图像文件类型
{
if (preg_match("/\.(jpg|jpeg|gif|png)$/i", $img_name, $matches)){
$type = strtolower($matches[1]);
}else{
$type = "string";
}
return $type;
}
}
?>