程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> php上傳圖片並壓縮的實現方法

php上傳圖片並壓縮的實現方法

編輯:PHP綜合

本文實例講解了php上傳圖片並壓縮的實現方法,之前一篇《PHP實現圖片上傳並壓縮》已經為大家進行了簡單介紹,此次實現上傳圖片然後按照比例縮略圖,指定縮略圖的最大高度或者最大寬度,具體內容如下

實現代碼:

<?php 
function _UPLOADPIC($upfile, $maxsize, $updir, $newname = 'date') { 
  
 if ($newname == 'date') 
 $newname = date ( "Ymdhis" ); //使用日期做文件名 
 $name = $upfile ["name"]; 
 $type = $upfile ["type"]; 
 $size = $upfile ["size"]; 
 $tmp_name = $upfile ["tmp_name"]; 
  
 switch ($type) { 
 case 'image/pjpeg' : 
 case 'image/jpeg' : 
  $extend = ".jpg"; 
  break; 
 case 'image/gif' : 
  $extend = ".gif"; 
  break; 
 case 'image/png' : 
  $extend = ".png"; 
  break; 
 } 
 if (emptyempty ( $extend )) { 
 echo ( "警告!只能上傳圖片類型:GIF JPG PNG" ); 
 exit (); 
 } 
 if ($size > $maxsize) { 
 $maxpr = $maxsize / 1000; 
 echo ( "警告!上傳圖片大小不能超過" . $maxpr . "K!" ); 
 exit (); 
 } 
 if (move_uploaded_file ( $tmp_name, $updir . $newname . $extend )) { 
 return $updir . $newname . $extend; 
 } 
} 
 
function show_pic_scal($width, $height, $picpath) { 
 $imginfo = GetImageSize ( $picpath ); 
 $imgw = $imginfo [0]; 
 $imgh = $imginfo [1]; 
  
 $ra = number_format ( ($imgw / $imgh), 1 ); //寬高比 
 $ra2 = number_format ( ($imgh / $imgw), 1 ); //高寬比 
  
 
 if ($imgw > $width or $imgh > $height) { 
 if ($imgw > $imgh) { 
  $newWidth = $width; 
  $newHeight = round ( $newWidth / $ra ); 
  
 } elseif ($imgw < $imgh) { 
  $newHeight = $height; 
  $newWidth = round ( $newHeight / $ra2 ); 
 } else { 
  $newWidth = $width; 
  $newHeight = round ( $newWidth / $ra ); 
 } 
 } else { 
 $newHeight = $imgh; 
 $newWidth = $imgw; 
 } 
 $newsize [0] = $newWidth; 
 $newsize [1] = $newHeight; 
  
 return $newsize; 
} 
 
 
 
function getImageInfo($src) 
{ 
 return getimagesize($src); 
} 
/** 
* 創建圖片,返回資源類型 
* @param string $src 圖片路徑 
* @return resource $im 返回資源類型 
* **/ 
function create($src) 
{ 
 $info=getImageInfo($src); 
 switch ($info[2]) 
 { 
 case 1: 
  $im=imagecreatefromgif($src); 
  break; 
 case 2: 
  $im=imagecreatefromjpeg($src); 
  break; 
 case 3: 
  $im=imagecreatefrompng($src); 
  break; 
 } 
 return $im; 
} 
/** 
* 縮略圖主函數 
* @param string $src 圖片路徑 
* @param int $w 縮略圖寬度 
* @param int $h 縮略圖高度 
* @return mixed 返回縮略圖路徑 
* **/ 
 
function resize($src,$w,$h) 
{ 
 $temp=pathinfo($src); 
 $name=$temp["basename"];//文件名 
 $dir=$temp["dirname"];//文件所在的文件夾 
 $extension=$temp["extension"];//文件擴展名 
 $savepath="{$dir}/{$name}";//縮略圖保存路徑,新的文件名為*.thumb.jpg 
 
 //獲取圖片的基本信息 
 $info=getImageInfo($src); 
 $width=$info[0];//獲取圖片寬度 
 $height=$info[1];//獲取圖片高度 
 $per1=round($width/$height,2);//計算原圖長寬比 
 $per2=round($w/$h,2);//計算縮略圖長寬比 
 
 //計算縮放比例 
 if($per1>$per2||$per1==$per2) 
 { 
 //原圖長寬比大於或者等於縮略圖長寬比,則按照寬度優先 
 $per=$w/$width; 
 } 
 if($per1<$per2) 
 { 
 //原圖長寬比小於縮略圖長寬比,則按照高度優先 
 $per=$h/$height; 
 } 
 $temp_w=intval($width*$per);//計算原圖縮放後的寬度 
 $temp_h=intval($height*$per);//計算原圖縮放後的高度 
 $temp_img=imagecreatetruecolor($temp_w,$temp_h);//創建畫布 
 $im=create($src); 
 imagecopyresampled($temp_img,$im,0,0,0,0,$temp_w,$temp_h,$width,$height); 
 if($per1>$per2) 
 { 
 imagejpeg($temp_img,$savepath, 100); 
 imagedestroy($im); 
 return addBg($savepath,$w,$h,"w"); 
 //寬度優先,在縮放之後高度不足的情況下補上背景 
 } 
 if($per1==$per2) 
 { 
 imagejpeg($temp_img,$savepath, 100); 
 imagedestroy($im); 
 return $savepath; 
 //等比縮放 
 } 
 if($per1<$per2) 
 { 
 imagejpeg($temp_img,$savepath, 100); 
 imagedestroy($im); 
 return addBg($savepath,$w,$h,"h"); 
 //高度優先,在縮放之後寬度不足的情況下補上背景 
 } 
} 
/** 
* 添加背景 
* @param string $src 圖片路徑 
* @param int $w 背景圖像寬度 
* @param int $h 背景圖像高度 
* @param String $first 決定圖像最終位置的,w 寬度優先 h 高度優先 wh:等比 
* @return 返回加上背景的圖片 
* **/ 
function addBg($src,$w,$h,$fisrt="w") 
{ 
 $bg=imagecreatetruecolor($w,$h); 
 $white = imagecolorallocate($bg,255,255,255); 
 imagefill($bg,0,0,$white);//填充背景 
 
 //獲取目標圖片信息 
 $info=getImageInfo($src); 
 $width=$info[0];//目標圖片寬度 
 $height=$info[1];//目標圖片高度 
 $img=create($src); 
 if($fisrt=="wh") 
 { 
 //等比縮放 
 return $src; 
 } 
 else 
 { 
 if($fisrt=="w") 
 { 
  $x=0; 
  $y=($h-$height)/2;//垂直居中 
 } 
 if($fisrt=="h") 
 { 
  $x=($w-$width)/2;//水平居中 
  $y=0; 
 } 
 imagecopymerge($bg,$img,$x,$y,0,0,$width,$height,100); 
 imagejpeg($bg,$src,100); 
 imagedestroy($bg); 
 imagedestroy($img); 
 return $src; 
 } 
 
} 
 
 
?>

使用方法:

$filename=(_UPLOADPIC($_FILES["upload"],$maxsize,$updir,$newname='date')); 
 $show_pic_scal=show_pic_scal(230, 230, $filename); 
 resize($filename,$show_pic_scal[0],$show_pic_scal[1]); 

希望本文所述對大家學習php程序設計有所幫助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved