《單文件上傳PHP類,可生成縮略圖和水印》要點:
本文介紹了單文件上傳PHP類,可生成縮略圖和水印,希望對您有用。如果有疑問,可以聯系我們。
維易PHP培訓學院每天發布《單文件上傳PHP類,可生成縮略圖和水印》等實戰技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養人才。
<必修php
/*
文件上傳時必要注意的具體事項有:
1.文件擴大名
2.文件尺寸
3.上傳的地位
4.上傳的子目次
5.上傳的文件名字
6.客戶所上傳的文件數據起源
*/
class UpLoadOne
{
private $FileData;//界說客戶所上傳的文件來源
private $AffirmExtension;//界說我們所確認的有效擴展名有哪些
private $UpFileSize;//定義我們所上傳文件的年夜小對其約束
private $UpSeat;//定義上傳文件的具體地位
private $UpSubDir;//界說上傳文件的子目錄
private $ThumbnailState='Off';//界說是否生成縮略圖開關On開啟Off關閉
private $ThumbnailWidth=array();//界說縮略圖的寬度
private $ThumbnailHeight=array();//界說縮略圖的高度
private $WatermarkState='Off';//界說是否添加水印,針對原圖進行添加
private $WatermarkPicPath='';//界說圖片水印的文件路徑
private $FileExtension;//界說當前所上傳的文件的擴展名
//$FileData,$AffirmExtension,$UpFileSize,$UpSeat,$UpSubDir,$ThumbnailState='Off',$ThumbnailWidth=array(),$ThumbnailHeight=array(),$WatermarkState='Off',$WatermarkPicPath=''
public function __construct($Param=array())
{
$this->FileData=isset($Param['FileData'])必修$Param['FileData']:'';
$this->AffirmExtension=isset($Param['AffirmExtension'])必修$Param['AffirmExtension']:'';
$this->UpFileSize=isset($Param['UpFileSize'])必修$Param['UpFileSize']:'';
$this->UpSeat=isset($Param['UpSeat'])必修$Param['UpSeat']:'';
$this->UpSubDir=isset($Param['UpSubDir'])必修$Param['UpSubDir']:'';
$this->ThumbnailState=isset($Param['ThumbnailState'])必修$Param['ThumbnailState']:'Off';
$this->ThumbnailWidth=isset($Param['ThumbnailWidth'])必修$Param['ThumbnailWidth']:array();
$this->ThumbnailHeight=isset($Param['ThumbnailHeight'])必修$Param['ThumbnailHeight']:array();
$this->WatermarkState=isset($Param['WatermarkState'])必修$Param['WatermarkState']:'Off';
$this->WatermarkPicPath=isset($Param['WatermarkPicPath'])必修$Param['WatermarkPicPath']:'';
}
public function FileUpLoad()
{
//驗證以后是否有文件上傳
if(!$this->CheckFileIsNull())
{
return 1;
}
//驗證當前客戶所上傳的圖片擴大名是否有效
if(!$this->CheckExtensionIsValid())
{
return 2;
}
//驗證當前客戶所上傳的文件年夜小是否合法
if(!$this->CheckFileSizeIsValid())
{
return 3;
}
//文件上傳保留
$FileSaveResult=$this->MoveFileSave();
if(empty($FileSaveResult))
{
return 4;
}else{
return $FileSaveResult;
}
}
//驗證以后客戶所上傳的文件是否為空
private function CheckFileIsNull()
{
if($this->FileData['error']==4)
{
return false;
}
$this->GetCurrentFileExtension();//獲取當前文件擴大名
$this->CheckDirIsValid();//驗證當前的目錄是否是正當有效的
$this->CheckSubDirIsValid();//驗證當前目錄下的子目錄是否是正當有效的
return true;
}
//獲取當前文件的擴大名
private function GetCurrentFileExtension()
{
$FileName=$this->FileData['name'];
$FileArr=explode('.',$FileName);
$this->FileExtension=end($FileArr);
return true;
}
//驗證當前客戶所上傳的圖片擴大名是否有效
private function CheckExtensionIsValid()
{
if(in_array($this->FileExtension,$this->AffirmExtension))
{
return true;
}
return false;
}
//驗證當前客戶所上傳的文件年夜小是否合法
private function CheckFileSizeIsValid()
{
if($this->FileData['size'] > $this->UpFileSize)
{
return false;
}
return true;
}
//驗證當前的目錄是否是正當有效的
private function CheckDirIsValid()
{
if(is_dir($this->UpSeat))
{
return true;
}
@mkdir($this->UpSeat);//創立根目錄
chmod($this->UpSeat,0777);//設置當前所創立的文件夾權限為可讀可寫
}
//驗證當前目錄下的子目錄是否是正當有效的
private function CheckSubDirIsValid()
{
if(!empty($this->UpSubDir))
{
if(is_dir($this->UpSeat.$this->UpSubDir))
{
return true;
}
@mkdir($this->UpSeat.$this->UpSubDir);//創立根目錄
chmod($this->UpSeat.$this->UpSubDir,0777);//設置當前所創立的文件夾權限為可讀可寫
}
return '';
}
//依據當前文件夾再創立出年月日的子文件夾
private function CheckYMDDirIsValid()
{
$Path=$this->UpSeat.$this->UpSubDir.date('Ymd');
if(is_dir($Path))
{
return $Path;
}
@mkdir($Path);//創立根目錄
chmod($Path,0777);//設置當前所創立的文件夾權限為可讀可寫
return $Path;
}
//挪動客戶所上傳的文件
private function MoveFileSave()
{
$Back=array();
if(is_uploaded_file($this->FileData['tmp_name']))
{
//依據當前文件夾再創立出年月日的子文件夾
$Dir=$this->CheckYMDDirIsValid();
$ThumbnailPicStr=$Dir.'/'.date('YmdHis').'_'.mt_rand(100,999);
$Path=$ThumbnailPicStr.'.'.$this->FileExtension;
if(move_uploaded_file($this->FileData['tmp_name'],$Path))
{
$Thumbnail='';
if($this->ThumbnailState=='On')
{
$Thumbnail=$this->CreateThumbnail($Path,$ThumbnailPicStr);//為當前所上傳的圖片天生縮略圖
}
if($this->WatermarkState=='On')
{
$this->AddWatermark($Path);
}
$Back['Main']=$Path;
$Back['Thumbnail']=$Thumbnail;
return $Back;
}
return false;
}
return false;
}
//為當前所上傳的圖片天生縮略圖
private function CreateThumbnail($Path,$ThumbnailPicStr)
{
$Back=array();
$PicInfo=$this->GetPicInfo($Path);
$imagecreatefromName='imagecreatefrom'.$PicInfo['PicType'];//imagecreatefromjpeg;
$ImgOld=$imagecreatefromName($Path);
if(!empty($this->ThumbnailWidth) && !empty($this->ThumbnailHeight))
{
foreach ($this->ThumbnailWidth as $key => $value) {
$Height=$this->ThumbnailHeight[$key];
$ImgNew=imagecreatetruecolor($value,$Height);
$Bg=imagecolorallocate($ImgNew,255,255,255);
imagefill($ImgNew,0,0,$Bg);
//計算縮放比例
//$Width、$Height 原始圖片寬度和高度
//$this->Width、$this->Height 縮略圖寬度和高度
//$X、$Y 當圖片縮放后小于縮略圖尺寸時,以1/2的比例左右兩邊分離補白
//$NewImg 新圖片資本
//$Img 原始圖片資本
if($PicInfo['Width'] < $value && $PicInfo['Height'] < $Height){
$Scale = 1;
} else {
$Scale = min($value/$PicInfo['Width'], $Height/$PicInfo['Height']);
}
//設置縮略圖的坐標及寬度和高度
$NewWidth = $PicInfo['Width'] * $Scale;
$NewHeight = $PicInfo['Height'] * $Scale;
$X = ($value - $NewWidth)/2;
$Y = ($Height - $NewHeight)/2;
//imagecopyresampled($NewImg,$Img,$X,$Y,0,0,$NewWidth,$NewHeight,$Width,$Height);
//--------------------------------------------------------------
imagecopyresampled($ImgNew,$ImgOld, $X, $Y, 0, 0, $NewWidth, $NewHeight, $PicInfo['Width'], $PicInfo['Height']);
//header('Content-Type:'.$PicInfo['Mime']);
$imageName='image'.$PicInfo['PicType'];
$SaveName=$ThumbnailPicStr.'.'.$value.'-'.$Height.'.'.$this->FileExtension;
$imageName($ImgNew,$SaveName);
imagedestroy($ImgNew);
$Back[]=$SaveName;
}
imagedestroy($ImgOld);
}
return $Back;
}
//獲取圖片根本信息
private function GetPicInfo($Path)
{
$PicInfo=getimagesize($Path);
list($Width,$Height,$Type)=$PicInfo;
$Mime=$PicInfo['mime'];
$PicType=image_type_to_extension($Type,false);
$Back=array();
$Back['Width']=$Width;
$Back['Height']=$Height;
$Back['Mime']=$Mime;
$Back['PicType']=$PicType;
return $Back;
}
//為以后所上傳的圖片添加水印
private function AddWatermark($Path)
{
if(!empty($this->WatermarkPicPath)&&is_file($this->WatermarkPicPath))
{
$PicInfo=$this->GetPicInfo($Path);
$imagecreatefromName='imagecreatefrom'.$PicInfo['PicType'];//imagecreatefromjpeg;
$ImgNew=$imagecreatefromName($Path);
$LogoPicInfo=$this->GetPicInfo($this->WatermarkPicPath);
$imagecreatefromLogoName='imagecreatefrom'.$LogoPicInfo['PicType'];//imagecreatefromjpeg;
$ImgLogo=$imagecreatefromLogoName($this->WatermarkPicPath);
imagecopy($ImgNew,$ImgLogo,$PicInfo['Width']-$LogoPicInfo['Width'],$PicInfo['Height']-$LogoPicInfo['Height'],0,0,$LogoPicInfo['Width'],$LogoPicInfo['Height']);
$imageName='image'.$PicInfo['PicType'];
$imageName($ImgNew,$Path);
imagedestroy($ImgNew);
imagedestroy($ImgLogo);
}
}
}
必修>