步驟如下:
- 文件上傳基本操作咯
- 在上傳之前,處理圖片(當然,也有可能是上傳圖片之後,在生成縮略圖 ,看自己需求了)
- 保存壓縮後的圖片
大致步驟就是這樣,具體如下:
文件上傳操作
這裏省略了,之前寫過一篇上傳文件的(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 之前,完成縮略圖的操作
大致步驟
- 從臨時文件獲取圖片資源 (imagecreatefrompng 或者是 imagecreatefromjpeg 函數)
- 創建畫布資
- 將源圖片重採樣畫到你的畫布上 (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{
//保存失敗了,檢查錯誤
}
具體情況,具體調整