php上傳圖片產生等比例縮圖代碼

來源:互聯網
上載者:User
 代碼如下 複製代碼

 

<?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]);

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.