PHP生成同比例的缩略图实现程序

在php中生成缩略图是程序开发中常用的,下面我找了几个不错的php生成缩略图的实现程序,有需要的朋友可使用,本人亲测绝对好用.

创建图像缩略图需要许多时间,此代码将有助于了解缩略图的逻辑,代码如下:

  1. /**********************
  2. *@filename - path to the image
  3. *@tmpname - temporary path to thumbnail
  4. *@xmax - max width
  5. *@ymax - max height
  6. */
  7. function resize_image($filename, $tmpname, $xmax, $ymax)
  8. {
  9. $ext = explode(".", $filename);
  10. $ext = $ext[count($ext)-1];
  11. if($ext == "jpg" || $ext == "jpeg")
  12. $im = imagecreatefromjpeg($tmpname);
  13. elseif($ext == "png")
  14. $im = imagecreatefrompng($tmpname);
  15. elseif($ext == "gif")
  16. $im = imagecreatefromgif($tmpname);
  17. $x = imagesx($im);
  18. $y = imagesy($im);
  19. if($x <= $xmax && $y <= $ymax)
  20. return $im;
  21. if($x >= $y) {
  22. $newx = $xmax;
  23. $newy = $newx * $y / $x;
  24. }
  25. else {
  26. $newy = $ymax;
  27. $newx = $x / $y * $newy;
  28. }
  29. $im2 = imagecreatetruecolor($newx, $newy);
  30. imagecopyresized($im2, $im, 0, 0, 0, 0, floor($newx), floor($newy), $x, $y);
  31. return $im2;
  32. }
  33. //例2,代码如下
  34. //开源代码phpfensi.com
  35. function creat_thumbnail($img,$w,$h,$path)
  36. {
  37. $org_info = getimagesize($img); //获得图像大小且是通过post传递过来的
  38. //var_dump($org_info);
  39. //Array ( [0] => 1024 [1] => 768 [2] => 3 [3] => width="1024" height="768" [bits] => 8 [mime] => image/png )
  40. $orig_x = $org_info[0]; //图像宽度
  41. $orig_y = $org_info[1]; //图像高度
  42. $orig_type = $org_info[2]; //图片类别即后缀 1 = GIF,2 = JPG,3 = PNG,
  43. //是真彩色图像
  44. if (function_exists("imagecreatetruecolor"))
  45. {
  46. switch($orig_type)
  47. {
  48. //从给定的gif文件名中取得的图像
  49. case 1 : $thumb_type = ".gif"; $_creatImage = "imagegif"; $_function = "imagecreatefromgif";
  50. break;
  51. //从给定的jpeg,jpg文件名中取得的图像
  52. case 2 : $thumb_type = ".jpg"; $_creatImage = "imagejpeg"; $_function = "imagecreatefromjpeg";
  53. break;
  54. //从给定的png文件名中取得的图像
  55. case 3 : $thumb_type = ".png"; $_creatImage = "imagepng"; $_function = "imagecreatefrompng";
  56. break;
  57. }
  58. }
  59. //如果从给定的文件名可取得的图像
  60. if(function_exists($_function))
  61. {
  62. $orig_image = $_function($img); //从给定的$img文件名中取得的图像
  63. }
  64. if (($orig_x / $orig_y) >= (4 / 3)) //如果宽/高 >= 4/3
  65. {
  66. $y = round($orig_y / ($orig_x / $w)); //对浮点数进行四舍五入
  67. $x = $w;
  68. }
  69. else //即 高/宽 >= 4/3
  70. {
  71. $x = round($orig_x / ($orig_y / $h));
  72. $y = $h;
  73. }
  74. $sm_image = imagecreatetruecolor($x, $y); //创建真彩色图片
  75. //重采样拷贝部分图像并调整大小
  76. Imagecopyresampled($sm_image, $orig_image, 0, 0, 0, 0, $x, $y, $orig_x, $orig_y);
  77. //imageJPEG($sm_image, '', 80); //在浏览器输出图像
  78. $tnpath = $path."/"."s_".date('YmdHis').$thumb_type; //缩略图的路径
  79. $thumbnail = @$_creatImage($sm_image, $tnpath, 80); //生成图片,成功返回true(或1)
  80. imagedestroy ($sm_image); //销毁图像
  81. if($thumbnail==true)
  82. {
  83. return $tnpath;
  84. }
  85. }