PHP 图片上传并生成缩略图类
2018-07-20 来源:open-open
<?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; } } } ?>
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。
上一篇:iOS图片自适应屏幕 截取
下一篇:iOS简单的音乐播放 声音播放
最新资讯
热门推荐