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; } }
} ?></pre>
本文由用戶 n3xb 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!