首页 > 开发 > PHP > 正文

PHP批量生成图片缩略图的方法

2024-05-04 23:36:29
字体:
来源:转载
供稿:网友

这篇文章主要介绍了PHP批量生成图片缩略图的方法,涉及php针对图片属性操作的相关技巧,需要的朋友可以参考下

本文实例讲述了PHP批量生成图片缩略图的方法。分享给大家供大家参考。具体如下:

 

 
  1. <?php 
  2. //用PHP批量生成图片缩略图 
  3. function mkdirs($dirname,$mode=0777) 
  4. //创建目录(目录, [模式]) 
  5. if(!is_dir($dirname)) 
  6. mkdirs($dirname,$mode); //如果目录不存在,递归建立 
  7. return mkdir($dirname,$mode); 
  8. return true; 
  9. function savefile($filename,$content=''
  10. //保存文件(文件, [内容]) 
  11. if(function_exists(file_put_contents)) 
  12. file_put_contents($filename,$content); 
  13. else 
  14. $fp=fopen($filename,"wb"); 
  15. fwrite($fp,$content); 
  16. fclose($fp); 
  17. function getsuffix($filename//获取文件名后缀 
  18. return end(explode(".",$filename)); 
  19. function checksuffix($filename,$arr//是否为允许类型(当前, 允许) 
  20. if(!is_array($arr)) 
  21. $arr=explode(",",str_replace(" ","",$arr)); 
  22. return in_array($filename,$arr) ? 1 : 0; 
  23. class image 
  24. var $src//源地址 
  25. var $newsrc//新图路径(本地化后) 
  26. var $allowtype=array(".gif",".jpg",".png",".jpeg"); //允许的图片类型 
  27. var $regif=0; //是否缩略GIF, 为0不处理 
  28. var $keep=0; //是否保留源文件(1为保留, 0为MD5) 
  29. var $over=0; //是否可以覆盖已存在的图片,为0则不可覆盖 
  30. var $dir//图片源目录 
  31. var $newdir//处理后的目录 
  32. function __construct($olddir=null,$newdir=null) 
  33. $this->dir=$olddir ? $olddir : "./images/temp"
  34. $this->newdir=$newdir ? $newdir : "./images/s"
  35. function reNames($src
  36. $md5file=substr(md5($src),10,10).strrchr($src,"."); 
  37. //MD5文件名后(例如:3293okoe.gif) 
  38. $md5file=$this->w."_".$this->h."_".$md5file
  39. //处理后文件名 
  40. return $this->newdir."/".$md5file
  41. //将源图片,MD5文件名后保存到新的目录里 
  42. function Mini($src,$w,$h,$q=80) 
  43. //生成缩略图 Mini(图片地址, 宽度, 高度, 质量) 
  44. $this->src=$src
  45. $this->w=$w
  46. $this->h=$h
  47. if(strrchr($src,".")==".gif" && $this->regif==0) 
  48. //是否处理GIF图 
  49. return $this->src; 
  50. if($this->keep==0) //是否保留源文件,默认不保留 
  51. $newsrc=$this->reNames($src); //改名后的文件地址 
  52. else //保持原名 
  53. $src=str_replace("//","/",$src); 
  54. $newsrc=$this->newdir.strrchr($src,"/"); 
  55. if(file_exists($newsrc) && $this->over==0) 
  56. //如果已存在,直接返回地址 
  57. return $newsrc
  58. if(strstr($src,"http://") && !strstr($src,$_SERVER['HTTP_HOST'])) 
  59. //如果是网络文件,先保存 
  60. $src=$this->getimg($src); 
  61. $arr=getimagesize($src); //获取图片属性 
  62. $width=$arr[0]; 
  63. $height=$arr[1]; 
  64. $type=$arr[2]; 
  65. switch($type
  66. case 1: //1 = GIF, 
  67. $im=imagecreatefromgif($src); 
  68. break
  69. case 2: //2 = JPG 
  70. $im=imagecreatefromjpeg($src); 
  71. break
  72. case 3: //3 = PNG 
  73. $im=imagecreatefrompng($src); 
  74. break
  75. default
  76. return 0; 
  77. //处理缩略图 
  78. $nim=imagecreatetruecolor($w,$h); 
  79. $k1=round($h/$w,2); 
  80. $k2=round($height/$width,2); 
  81. if($k1<$k2
  82. $width_a=$width
  83. $height_a=round($width*$k1); 
  84. $sw=0; 
  85. $sh=($height-$height_a)/2; 
  86. else 
  87. $width_a=$height/$k1
  88. $height_a=$height
  89. $sw=($width-$width_a)/2; 
  90. $sh = 0; 
  91. //生成图片 
  92. if(function_exists(imagecopyresampled)) 
  93. imagecopyresampled($nim,$im,0,0,$sw,$sh,$w,$h,$width_a,$height_a); 
  94. else 
  95. imagecopyresized($nim,$im,0,0,$sw,$sh,$w,$h,$width_a,$height_a); 
  96. if(!is_dir($this->newdir)) 
  97. mkdir($this->newdir); 
  98. switch($type//保存图片 
  99. case 1: 
  100. $rs=imagegif($nim,$newsrc); 
  101. break
  102. case 2: 
  103. $rs=imagejpeg($nim,$newsrc,$q); 
  104. break
  105. case 3: 
  106. $rs=imagepng($nim,$newsrc); 
  107. break
  108. default
  109. return 0; 
  110. return $newsrc//返回处理后路径 
  111. function getimg($filename
  112. $md5file=$this->dir."/".substr(md5($filename),10,10).strrchr($filename,"."); 
  113. if(file_exists($md5file)) 
  114. return $md5file
  115. //开始获取文件,并返回新路径 
  116. $img=file_get_contents($filename); 
  117. if($img
  118. if(!is_dir($this->dir)) 
  119. mkdir($this->dir); 
  120. savefile($md5file,$img); 
  121. return $md5file
  122. function reImg($src,$w,$h,$q
  123. //转换缩略图(文件名和结构不变) 
  124. $this->keep=1; 
  125. return $this->Mini($src,$w,$h,$q); 
  126. //return 生成的地址 
  127. $image=new image(); 
  128. echo $image->reImg("images/zht.jpg",75,75,80); 
  129. echo "<br/>"
  130. echo $image->reImg("images/m8920.jpg",75,75,80); 
  131. echo "<br/>"
  132. echo $image->getimg("./images/s/zht.jpg"); 
  133. ?> 

希望本文所述对大家的php程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表