php 上传图片并按比例生成指定大小图

这是一款图象缩略函数,把上传的新图片给$srcfile然后进行文件按$thumbwidth 缩小图宽最大尺寸与$thumbheitht 缩小图高最大尺寸,生成小图.

图象缩略函数,参数说明:

$srcfile 原图地址; $dir 新图目录 $thumbwidth 缩小图宽最大尺寸 $thumbheitht 缩小图高最大尺寸 $ratio 默认等比例缩放 为1是缩小到固定尺寸.

php 上传图片并按比例生成指定大小图实例代码如下:

  1. function makethumb($srcfile,$dir,$thumbwidth,$thumbheight,$ratio=0)
  2. {
  3. //判断文件是否存在
  4. if (!file_exists($srcfile))return false;
  5. //生成新的同名文件,但目录不同
  6. $imgname=explode('/',$srcfile);
  7. $arrcount=count($imgname);
  8. $dstfile = $dir.$imgname[$arrcount-1];
  9. //缩略图大小
  10. $tow = $thumbwidth;
  11. $toh = $thumbheight;
  12. if($tow < 40) $tow = 40;
  13. if($toh < 45) $toh = 45;
  14. //获取图片信息
  15. $im ='';
  16. if($data = getimagesize($srcfile)) {
  17. if($data[2] == 1) {
  18. $make_max = 0;//gif不处理
  19. if(function_exists("imagecreatefromgif")) {
  20. $im = imagecreatefromgif($srcfile);
  21. }
  22. } elseif($data[2] == 2) {
  23. if(function_exists("imagecreatefromjpeg")) {
  24. $im = imagecreatefromjpeg($srcfile);
  25. }
  26. } elseif($data[2] == 3) {
  27. if(function_exists("imagecreatefrompng")) {
  28. $im = imagecreatefrompng($srcfile);
  29. }
  30. }
  31. }
  32. if(!$im) return '';
  33. $srcw = imagesx($im);
  34. $srch = imagesy($im);
  35. $towh = $tow/$toh;
  36. $srcwh = $srcw/$srch;
  37. if($towh <= $srcwh){
  38. $ftow = $tow;
  39. $ftoh = $ftow*($srch/$srcw);
  40. } else {
  41. $ftoh = $toh;
  42. $ftow = $ftoh*($srcw/$srch);
  43. }
  44. if($ratio){
  45. $ftow = $tow;
  46. $ftoh = $toh;
  47. }
  48. //缩小图片
  49. if($srcw > $tow || $srch > $toh || $ratio) {
  50. if(function_exists("imagecreatetruecolor") && function_exists("imagecopyresampled") && @$ni = imagecreatetruecolor($ftow, $ftoh)) {
  51. imagecopyresampled($ni, $im, 0, 0, 0, 0, $ftow, $ftoh, $srcw, $srch);
  52. } elseif(function_exists("imagecreate") && function_exists("imagecopyresized") && @$ni = imagecreate($ftow, $ftoh)) {
  53. imagecopyresized($ni, $im, 0, 0, 0, 0, $ftow, $ftoh, $srcw, $srch);
  54. } else {
  55. return '';
  56. }
  57. if(function_exists('imagejpeg')) {
  58. imagejpeg($ni, $dstfile);
  59. } elseif(function_exists('imagepng')) {
  60. imagepng($ni, $dstfile);
  61. }
  62. }else {
  63. //小于尺寸直接复制
  64. copy($srcfile,$dstfile);
  65. }
  66. imagedestroy($im);
  67. if(!file_exists($dstfile)) {
  68. return '';
  69. } else { //开源代码phpfensi.com
  70. return $dstfile;
  71. }
  72. }