1. 程式人生 > >thinkphp上傳圖片及生成縮圖

thinkphp上傳圖片及生成縮圖

一、上傳圖片的HTML程式碼

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>upload</title>
	</head>
	<body>
		<img src="{$Think.const.IMG_URL}Uploads/{$name}"  onerror="this.src='{$Think.const.IMG_URL}Uploads/default.jpg'"/>
   
	<form method='post' enctype="multipart/form-data">
		<input type='file' name="image" accept='image/jpg,image/jpeg,image/gif,image/png'/><br/>
		<input type='submit' value="upload"/>
	</form>
	</body>
</html>


一定要注意的是,form表單的屬性一定要寫上,缺一不可。

<span style="font-size:18px;color:#FF0000;">method='post' enctype="multipart/form-data"</span>

二、上傳圖片後再生成縮圖儲存


出現如上所示問題,是因為根目錄不存在,$upload->rootPath的預設根目錄為當前專案下的Uploads資料夾,即:"./Uploads/";

可以手動建立,也可以將根目錄修改為已經存在的目錄。

if (!empty($_FILES)) {
        $upload = new \Think\Upload();// 例項化上傳類
        $upload->maxSize = 2048000;             //上傳檔案最大大小
        $upload->allowExts = array('jpg','jpeg','gif','png');//允許上傳檔案型別
        $upload->rootPath = "./Application/Home/Public/";  //檔案儲存根目錄,可以自定義
        $upload->savePath = "Uploads/";                //檔案儲存目錄
        $upload->replace = 'true';                      //可以替換相同名稱的檔案
        $upload->saveName = 'image';
        $file = $upload->upload()['image'];
        if(!$file){
            $this->error($upload->getError());//獲取失敗資訊
        } else {
            $img = "./Application/Home/Public/".$file['savepath'].$file['savename'];//獲取檔案上傳目錄
            $image = new \Think\Image(); 
            $image->open($img);    //開啟上傳圖片
            $image->thumb(102, 142,\Think\Image::IMAGE_THUMB_FIXED)->save($desitination.'thumb.jpg');//生成縮圖
        }
}

三、生成縮圖之後再儲存縮圖

        圖片上傳過程中,直接對上傳檔案暫存目錄下的圖片進行處理,生成縮圖並儲存,則原圖片就不再儲存,減少記憶體的消耗。

public function img(){
        $name = $_FILES['image']['tmp_name'];//從上傳檔案暫存目錄下讀取檔案
        $image = new \Think\Image(); 
        $image->open($name);//生成縮圖
        $image->thumb(102, 142,\Think\Image::IMAGE_THUMB_FIXED)->save('./image.jpg');
   }

並且支援多種型別的縮圖生成,設定包括Think\Image的下列常量或者對應的數字:
  1. IMAGE_THUMB_SCALE =1;//等比例縮放型別
  2. IMAGE_THUMB_FILLED =2;//縮放後填充型別
  3. IMAGE_THUMB_CENTER =3;//居中裁剪型別
  4. IMAGE_THUMB_NORTHWEST =4;//左上角裁剪型別
  5. IMAGE_THUMB_SOUTHEAST =5;//右下角裁剪型別
  6. IMAGE_THUMB_FIXED =6;//固定尺寸縮放型別

可以參考thinkphp學習手冊——影象處理:

http://document.thinkphp.cn/manual_3_2.html#image