溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

php怎么實(shí)現(xiàn)上傳圖片并壓縮

發(fā)布時(shí)間:2021-08-06 09:21:56 來源:億速云 閱讀:190 作者:chen 欄目:開發(fā)技術(shù)

這篇文章主要介紹“php怎么實(shí)現(xiàn)上傳圖片并壓縮”,在日常操作中,相信很多人在php怎么實(shí)現(xiàn)上傳圖片并壓縮問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”php怎么實(shí)現(xiàn)上傳圖片并壓縮”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

實(shí)現(xiàn)代碼:

<?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); 
} 
/** 
* 創(chuàng)建圖片,返回資源類型 
* @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; 
} 
/** 
* 縮略圖主函數(shù) 
* @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"];//文件擴(kuò)展名 
 $savepath="{$dir}/{$name}";//縮略圖保存路徑,新的文件名為*.thumb.jpg 
 
 //獲取圖片的基本信息 
 $info=getImageInfo($src); 
 $width=$info[0];//獲取圖片寬度 
 $height=$info[1];//獲取圖片高度 
 $per1=round($width/$height,2);//計(jì)算原圖長(zhǎng)寬比 
 $per2=round($w/$h,2);//計(jì)算縮略圖長(zhǎng)寬比 
 
 //計(jì)算縮放比例 
 if($per1>$per2||$per1==$per2) 
 { 
 //原圖長(zhǎng)寬比大于或者等于縮略圖長(zhǎng)寬比,則按照寬度優(yōu)先 
 $per=$w/$width; 
 } 
 if($per1<$per2) 
 { 
 //原圖長(zhǎng)寬比小于縮略圖長(zhǎng)寬比,則按照高度優(yōu)先 
 $per=$h/$height; 
 } 
 $temp_w=intval($width*$per);//計(jì)算原圖縮放后的寬度 
 $temp_h=intval($height*$per);//計(jì)算原圖縮放后的高度 
 $temp_img=imagecreatetruecolor($temp_w,$temp_h);//創(chuàng)建畫布 
 $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"); 
 //寬度優(yōu)先,在縮放之后高度不足的情況下補(bǔ)上背景 
 } 
 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"); 
 //高度優(yōu)先,在縮放之后寬度不足的情況下補(bǔ)上背景 
 } 
} 
/** 
* 添加背景 
* @param string $src 圖片路徑 
* @param int $w 背景圖像寬度 
* @param int $h 背景圖像高度 
* @param String $first 決定圖像最終位置的,w 寬度優(yōu)先 h 高度優(yōu)先 wh:等比 
* @return 返回加上背景的圖片 
* **/ 
function addBg($src,$w,$h,$fisrt="w") 
{ 
 $bg=imagecreatetruecolor($w,$h); 
 $white = imagecolorallocate($bg,255,255,255); 
 imagefill($bg,0,0,$white);//填充背景 
 
 //獲取目標(biāo)圖片信息 
 $info=getImageInfo($src); 
 $width=$info[0];//目標(biāo)圖片寬度 
 $height=$info[1];//目標(biāo)圖片高度 
 $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]);

到此,關(guān)于“php怎么實(shí)現(xiàn)上傳圖片并壓縮”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI