PHP 上傳並壓縮圖片

步驟如下:
  • 文件上傳基本操作咯
  • 在上傳之前,處理圖片(當然,也有可能是上傳圖片之後,在生成縮略圖 ,看自己需求了)
  • 保存壓縮後的圖片

大致步驟就是這樣,具體如下:

文件上傳操作

這裏省略了,之前寫過一篇上傳文件的(https://blog.csdn.net/csdn_zhongwu/article/details/84308186)

關鍵點:

舉個栗子:

	 $file = $_FILES['file'];//待上傳文件
	 //$file['tmp_name'] 就是臨時文件名
	 move_uploaded_file($file['tmp_name'] ,$path);//$path 文件保存路徑

move_upload_file 函數就是把臨時文件保存到本地了
那麼,在移動文件之前,你需要做什麼呢?

壓縮圖片(生成縮略圖)

在 move_upload_file 之前,完成縮略圖的操作
大致步驟

  1. 從臨時文件獲取圖片資源 (imagecreatefrompng 或者是 imagecreatefromjpeg 函數)
  2. 創建畫布資
  3. 將源圖片重採樣畫到你的畫布上 (imagecopyresampled)

關鍵函數: imagecopyresampled 下面是詳解

	//將一幅圖像中的一塊正方形區域拷貝到另一個圖像中,
	//平滑地插入像素值,因此,尤其是,減小了圖像的大小而仍然保持了極大的清晰度。
   imagecopyresampled($dst_image, $src_image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h);
   //dst_img  	目標圖片 類型 resource  就是你創建的畫布
   //src_img 	源圖片 類型 resource  就是從臨時文件中獲取到的圖片資源
   //dst_x     目標圖片起始x座標
   //dst_y    目標圖片起始y座標   
   //src_x   源圖片起始x座標
   //src_y  源圖片起始y座標
   //dst_w 	目標圖片寬
   //dst_h		目標圖片高
   //src_w   源圖片寬
   //src_h   源圖片高

這樣看來, 是否更明瞭,看代碼片段

list(,$src_type) = explode('/', $file['type']);//上傳文件的類型,(png ,jpeg)
$src_fnc = 'imagecreatefrom' . $src_type;//創建圖像資源函數 對應函數 imagecreatefrompng 或者 imagecreatefromjpeg 
$src_image = $src_fnc($file["tmp_name"]);//臨時圖片資源
$src_w = imagesx($src_image);//上傳圖片的寬
$src_h = imagesy($src_image);//高
$dst_w = floor($src_w/3);//這裏 目標圖片的寬是源圖片的三分之一,
$dst_h = floor($src_h/3);//同樣的  
$dst_image = imagecreatetruecolor($dst_w, $dst_h);//此時的畫布爲原來圖片的 1/3
imagecopyresampled($dst_image, $src_image, 0, 0, 0, 0, $dst_w, $dst_h, $src_w, $src_h);

$out_fnc = 'image' . $src_type;//imagepng   imagejpeg
if( !($out_fnc($dst_image ,$path) && file_exists($path))){
    //縮略圖保存成功了,文件路徑就是$path
} else{
    //保存失敗了,檢查錯誤
}

具體情況,具體調整

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章