用户名:
密 码: 记住
您当前的位置:首页 > 网络编程 > php教程

php上传图片生成等比例缩略图代码

时间:2015-01-23  来源:西部数据  作者:西部数据

一个简单的使用php上传图片文件生然后再生成一张等比例的缩略图效果,有需要学习的朋友可参考参考,实例代码如下:

  1. <?php  
  2. function _UPLOADPIC($upfile$maxsize$updir$newname = 'date') { 
  3.  
  4. if ($newname == 'date'
  5.  
  6. $newname = date ( "Ymdhis" ); //使用日期做文件名  
  7.  
  8. $name = $upfile ["name"]; 
  9.  
  10. $type = $upfile ["type"]; 
  11.  
  12. $size = $upfile ["size"]; 
  13.  
  14. $tmp_name = $upfile ["tmp_name"]; 
  15.  
  16. switch ($type) { 
  17.  
  18. case 'image/pjpeg' : 
  19.  
  20. case 'image/jpeg' : 
  21.  
  22. $extend = ".jpg"
  23.  
  24. break
  25.  
  26. case 'image/gif' : 
  27.  
  28. $extend = ".gif"
  29.  
  30. break
  31.  
  32. case 'image/png' : 
  33.  
  34. $extend = ".png"
  35.  
  36. break
  37.  
  38.  
  39. if (emptyempty ( $extend )) { 
  40.  
  41. echo ( "警告!只能上传图片类型:GIF JPG PNG" ); 
  42.  
  43. exit (); 
  44.  
  45.  
  46. if ($size > $maxsize) { 
  47.  
  48. $maxpr = $maxsize / 1000; 
  49.  
  50. echo ( "警告!上传图片大小不能超过" . $maxpr . "K!" ); 
  51.  
  52. exit (); 
  53.  
  54.  
  55. if (move_uploaded_file ( $tmp_name$updir . $newname . $extend )) { 
  56.  
  57. return $updir . $newname . $extend
  58.  
  59.  
  60.  
  61.   
  62.  
  63. function show_pic_scal($width$height$picpath) { 
  64.  
  65. $imginfo = GetImageSize ( $picpath ); 
  66.  
  67. $imgw = $imginfo [0]; 
  68.  
  69. $imgh = $imginfo [1]; 
  70.  
  71.   
  72.  
  73. $ra = number_format ( ($imgw / $imgh), 1 ); //宽高比 
  74.  
  75. $ra2 = number_format ( ($imgh / $imgw), 1 ); //高宽比 
  76.  
  77.   
  78.  
  79.   
  80.  
  81. if ($imgw > $width or $imgh > $height) { 
  82.  
  83. if ($imgw > $imgh) { 
  84.  
  85. $newWidth = $width
  86.  
  87. $newHeight = round ( $newWidth / $ra ); 
  88.  
  89.   
  90.  
  91. elseif ($imgw < $imgh) { 
  92.  
  93. $newHeight = $height
  94.  
  95. $newWidth = round ( $newHeight / $ra2 ); 
  96.  
  97. else { 
  98.  
  99. $newWidth = $width
  100.  
  101. $newHeight = round ( $newWidth / $ra ); 
  102.  
  103.  
  104. else { 
  105.  
  106. $newHeight = $imgh
  107.  
  108. $newWidth = $imgw
  109.  
  110.  
  111. $newsize [0] = $newWidth
  112.  
  113. $newsize [1] = $newHeight
  114.  
  115.   
  116.  
  117. return $newsize
  118.  
  119.  
  120.   
  121.  
  122.   
  123.  
  124.   
  125.  
  126. function getImageInfo($src
  127.  
  128.  
  129. return getimagesize($src); 
  130.  
  131.  
  132. /** 
  133.  
  134. * 创建图片,返回资源类型 
  135.  
  136. * @param string $src 图片路径 
  137.  
  138. * @return resource $im 返回资源类型  
  139.  
  140. * **/  
  141.  
  142. function create($src
  143.  
  144.  
  145. $info=getImageInfo($src); 
  146.  
  147. switch ($info[2]) 
  148.  
  149.  
  150. case 1: 
  151.  
  152. $im=imagecreatefromgif($src); 
  153.  
  154. break
  155.  
  156. case 2: 
  157.  
  158. $im=imagecreatefromjpeg($src); 
  159.  
  160. break
  161.  
  162. case 3: 
  163.  
  164. $im=imagecreatefrompng($src); 
  165.  
  166. break
  167.  
  168.  
  169. return $im
  170.  
  171.  
  172. /** 
  173.  
  174. * 缩略图主函数 
  175.  
  176. * @param string $src 图片路径 
  177.  
  178. * @param int $w 缩略图宽度 
  179.  
  180. * @param int $h 缩略图高度 
  181.  
  182. * @return mixed 返回缩略图路径 
  183.  
  184. * **/  
  185.  
  186.   
  187.  
  188. function resize($src,$w,$h
  189.  
  190.  
  191. $temp=pathinfo($src); 
  192.  
  193. $name=$temp["basename"];//文件名 
  194.  
  195. $dir=$temp["dirname"];//文件所在的文件夹 
  196.  
  197. $extension=$temp["extension"];//文件扩展名 
  198.  
  199. $savepath="{$dir}/{$name}";//缩略图保存路径,新的文件名为*.thumb.jpg 
  200.  
  201.   
  202.  
  203. //获取图片的基本信息 
  204.  
  205. $info=getImageInfo($src); 
  206.  
  207. $width=$info[0];//获取图片宽度 
  208.  
  209. $height=$info[1];//获取图片高度 
  210.  
  211. $per1=round($width/$height,2);//计算原图长宽比 
  212.  
  213. $per2=round($w/$h,2);//计算缩略图长宽比 
  214.  
  215.   
  216.  
  217. //计算缩放比例 
  218.  
  219. if($per1>$per2||$per1==$per2
  220.  
  221.  
  222. //原图长宽比大于或者等于缩略图长宽比,则按照宽度优先 
  223.  
  224. $per=$w/$width
  225.  
  226.  
  227. if($per1<$per2
  228.  
  229.  
  230. //原图长宽比小于缩略图长宽比,则按照高度优先 
  231.  
  232. $per=$h/$height
  233.  
  234.  
  235. $temp_w=intval($width*$per);//计算原图缩放后的宽度 
  236.  
  237. $temp_h=intval($height*$per);//计算原图缩放后的高度 
  238.  
  239. $temp_img=imagecreatetruecolor($temp_w,$temp_h);//创建画布 
  240.  
  241. $im=create($src); 
  242.  
  243. imagecopyresampled($temp_img,$im,0,0,0,0,$temp_w,$temp_h,$width,$height); 
  244.  
  245. if($per1>$per2
  246.  
  247.  
  248. imagejpeg($temp_img,$savepath, 100); 
  249.  
  250. imagedestroy($im); 
  251.  
  252. return addBg($savepath,$w,$h,"w"); 
  253.  
  254. //宽度优先,在缩放之后高度不足的情况下补上背景 
  255.  
  256.  
  257. if($per1==$per2
  258.  
  259.  
  260. imagejpeg($temp_img,$savepath, 100); 
  261.  
  262. imagedestroy($im); 
  263.  
  264. return $savepath
  265.  
  266. //等比缩放 
  267.  
  268.  
  269. if($per1<$per2
  270.  
  271.  
  272. imagejpeg($temp_img,$savepath, 100); 
  273.  
  274. imagedestroy($im); 
  275.  
  276. return addBg($savepath,$w,$h,"h"); 
  277.  
  278. //高度优先,在缩放之后宽度不足的情况下补上背景 
  279.  
  280.  
  281.  
  282. /** 
  283.  
  284. * 添加背景 
  285.  
  286. * @param string $src 图片路径 
  287.  
  288. * @param int $w 背景图像宽度 
  289.  
  290. * @param int $h 背景图像高度 
  291.  
  292. * @param String $first 决定图像最终位置的,w 宽度优先 h 高度优先 wh:等比 
  293.  
  294. * @return 返回加上背景的图片 
  295.  
  296. * **/  
  297.  
  298. function addBg($src,$w,$h,$fisrt="w"
  299.  
  300.  
  301. $bg=imagecreatetruecolor($w,$h); 
  302.  
  303. $white = imagecolorallocate($bg,255,255,255); 
  304.  
  305. imagefill($bg,0,0,$white);//填充背景 
  306.  
  307.   
  308.  
  309. //获取目标图片信息 
  310.  
  311. $info=getImageInfo($src); 
  312.  
  313. $width=$info[0];//目标图片宽度 
  314.  
  315. $height=$info[1];//目标图片高度 
  316.  
  317. $img=create($src); 
  318.  
  319. if($fisrt=="wh"
  320.  
  321.  
  322. //等比缩放 
  323.  
  324. return $src
  325.  
  326.  
  327. else  
  328.  
  329.  
  330. if($fisrt=="w"
  331.  
  332.  
  333. $x=0; 
  334.  
  335. $y=($h-$height)/2;//垂直居中 
  336.  
  337.  
  338. if($fisrt=="h"
  339.  
  340.  
  341. $x=($w-$width)/2;//水平居中 
  342.  
  343. $y=0; 
  344.  
  345.  
  346. imagecopymerge($bg,$img,$x,$y,0,0,$width,$height,100); 
  347.  
  348. imagejpeg($bg,$src,100); 
  349.  
  350. imagedestroy($bg); 
  351.  
  352. imagedestroy($img); 
  353.  
  354. return $src
  355.  
  356. }  
  357. }  
  358. ?>  
  359.  
  360. //使用方法:  
  361. //开源代码phpfensi.com 
  362. $filename=(_UPLOADPIC($_FILES["upload"],$maxsize,$updir,$newname='date')); 
  363. $show_pic_scal=show_pic_scal(230, 230, $filename); 
  364. resize($filename,$show_pic_scal[0],$show_pic_scal[1]); 
来顶一下
返回首页
返回首页
推荐资讯
WiFi太不安全:7岁女孩11分钟内入侵公共网络 WiFi太不安全:7岁女孩11分钟内入侵近期刚刚发布研究说WiFi网络能获得人们手机里多少私人信息,
不服跑个分?人工智能也出现“刷分”乱象 不服跑个分?人工智能也出现“刷分2014年,人工智能领域突然爆发,成为了科研和科技创业的热门
相关文章
栏目更新
栏目热门