程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> 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]);

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