[php]代码库
<?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;
}
}
}
?>