
<?PHP |
/** |
* 上传图片 |
*/ |
class imgUpload{ |
static protected $a; |
protected $formName; //表单名称 |
protected $directory; //文件上传至目录 |
protected $maxSize; //最大文件上传大小 |
protected $canUpload; //是否可以上传 |
protected $doUpFile; //上传的文件名 |
protected $sm_File; //缩略图名称 |
|
private function __construct($_formName='file', $_directory='./images/uploads/', $_maxSize=1048576){ //1024*1024=1M |
//初始化参数 |
$this->formName = $_formName; |
$this->directory = $_directory; |
$this->maxSize = $_maxSize; |
$this->canUpload = true; |
$this->doUpFile = ''; |
$this->sm_File = ''; |
} |
|
//判断图片是否属于允许格式内 |
static public function Type($_formName='file'){ |
$_type = $_FILES[$_formName]['type']; |
switch ($_type){ |
case 'image/gif': |
if (self::$a==NULL) |
self::$a = new imgUpload($_formName); |
break; |
case 'image/pjpeg': |
if (self::$a==NULL) |
self::$a = new imgUpload($_formName); |
break; |
case 'image/x-png': |
if (self::$a==NULL) |
self::$a = new imgUpload($_formName); |
break; |
default: |
self::$a = false; |
} |
return self::$a; |
} |
|
//获取文件大小 |
public function getSize($_format='K'){ |
if ($this->canUpload) { |
if (0 == $_FILES[$this->formName]['size']) { |
$this->canUpload = false; |
return $this->canUpload; |
break; |
} |
switch ($_format){ |
case 'B': |
return $_FILES[$this->formName]['size']; |
break; |
case 'K': |
return round($_FILES[$this->formName]['size'] / 1024); |
break; |
case 'M': |
return round($_FILES[$this->formName]['size'] / (1024*1024),2); |
break; |
} |
} |
} |
|
//获取文件类型 |
public function getExt(){ |
if ($this->canUpload) { |
$_name = $_FILES[$this->formName]['name']; |
$_nameArr = explode('.',$_name); |
$_count = count($_nameArr)-1; |
} |
return $_nameArr[$_count]; |
} |
|
//获取文件名称 |
public function getName(){ |
if ($this->canUpload) { |
return $_FILES[$this->formName]['name']; |
} |
} |
|
//新建文件名 |
public function newName(){ |
return date('YmdHis').rand(0,9); |
} |
|
//上传文件 |
public function upload(){ |
if ($this->canUpload) |
{ |
$_getSize = $this->getSize('B'); |
if (!$_getSize) |
{ |
return $_getSize; |
break; |
} |
else |
{ |
$_newName = $this->newName(); |
$_ext = $this->getExt(); |
$_doUpload = move_uploaded_file($_FILES[$this->formName]['tmp_name'], $this->directory.$_newName.".".$_ext); |
if ($_doUpload) |
{ |
$this->doUpFile = $_newName; |
} |
return $_doUpload; |
} |
} |
} |
|
//创建缩略图 |
public function thumb($_dstChar='_m', $_max_len=320){ //$_dstChar:_m , _s |
if ($this->canUpload && $this->doUpFile != "") { |
$_ext = $this->getExt(); |
$_srcImage = $this->directory.$this->doUpFile.".".$_ext; |
|
//得到图片信息数组 |
$_date = getimagesize($_srcImage, &$info); |
|
$src_w = $_date[0]; //源图片宽 |
$src_h = $_date[1]; //源图片高 |
$src_max_len = max($src_w, $src_h); //求得长边 |
$src_min_len = min($src_w, $src_h); //求得短边 |
$dst_w = ''; //目标图片宽 |
$dst_h = ''; //目标图片高 |
|
//宽高按比例缩放,最长边不大于$_max_len |
if ($src_max_len>$_max_len) |
{ |
$percent = $src_min_len / $src_max_len; |
if ($src_w == $src_max_len) |
{ |
$dst_w = $_max_len; |
$dst_h = $percent * $dst_w; |
} |
else |
{ |
$dst_h = $_max_len; |
$dst_w = $percent * $dst_h; |
} |
} |
else |
{ |
$dst_w = $src_w; |
$dst_h = $src_h; |
} |
|
//建立缩略图时,源图片的位置 |
$src_x = ''; |
$src_y = ''; |
|
//判断如果缩略图用于logo,将对其进行裁减 |
if ('s_' == $_dstChar) { |
$src_x = $src_w * 0.10; |
$src_y = $src_h * 0.10; |
$src_w *= 0.8; |
$src_h *= 0.8; |
} |
|
//判断图片类型并创建对应新图片 |
switch ($_date[2]){ |
case 1: |
$src_im = imagecreatefromgif($_srcImage); |
break; |
case 2: |
$src_im = imagecreatefromjpeg($_srcImage); |
break; |
case 3: |
$src_im = imagecreatefrompng($_srcImage); |
break; |
case 8: |
$src_im = imagecreatefromwbmp($_srcImage); |
break; |
} |
|
//创建一幅新图像 |
if ($_date[2]==1) { //gif无法应用imagecreatetruecolor |
$dst_im = imagecreate($dst_w, $dst_h); |
}else { |
$dst_im = imagecreatetruecolor($dst_w, $dst_h); |
} |
|
//对这副图像进行缩略图copy |
// $bg = imagecolorallocate($dst_im,255,255,0); |
imagecopyresized($dst_im,$src_im, 0, 0, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h ); |
//对图片进行抗锯齿操作 |
imageantialias($dst_im, true); |
|
switch ($_date[2]) { |
case 1: |
$cr = imagegif($dst_im, $this->directory.$this->doUpFile.$_dstChar.".".$_ext, 100); |
break; |
case 2: |
$cr = imagejpeg($dst_im, $this->directory.$this->doUpFile.$_dstChar.".".$_ext, 100); |
break; |
case 3://imagepng有问题,所以在这里用imagejpg代替 |
$cr = imagejpeg($dst_im, $this->directory.$this->doUpFile.$_dstChar.".".$_ext, 100); |
break; |
} |
// $cr = imagejpeg($dst_im, $this->directory.$_dstChar.$this->doUpFile, 90); |
if ($cr) { |
$this->sm_File = $this->directory.$this->doUpFile.$_dstChar.".".$_ext; |
return $this->sm_File; |
}else { |
return false; |
} |
} |
imagedestroy($dst_im); |
imagedestroy($cr); |
} |
|
//得到上传后的文件名 |
public function getUpFile(){ |
if ($this->doUpFile!='') { |
$_ext = $this->getExt(); |
return $this->doUpFile.".".$_ext; |
}else { |
return false; |
} |
} |
|
//得到上传后的文件全路径 |
public function getFilePatch(){ |
if ($this->doUpFile!='') { |
$_ext = $this->getExt(); |
return $this->directory.$this->doUpFile.".".$_ext; |
}else { |
return false; |
} |
} |
|
//得到缩略图文件全路径 |
public function getThumb(){ |
if ($this->sm_File!='') { |
return $this->sm_File; |
}else { |
return false; |
} |
} |
//得到上传文件的路径 |
public function getDirectory(){ |
if ($this->directory!='') { |
return $this->directory; |
}else { |
return false; |
} |
} |
} |
?> |



