首頁  >  文章  >  後端開發  >  用PHP批量產生圖片縮圖

用PHP批量產生圖片縮圖

WBOY
WBOY原創
2016-07-25 08:44:12797瀏覽
複製程式碼
  1. function mkdirs($dirname,$mode=0777) //建立目錄(目錄, [模式])
  2. {
  3. if(!is_dir($dirname))
  4. {
  5. mkdirs($dirname,$mode); //如果目錄不存在,遞歸建立
  6. return mkdir($ dirname,$mode);
  7. }
  8. return true;
  9. }
  10. function savefile($filename,$content='') //儲存檔案(檔案, [內容])
  11. {
  12. if(function_exists(file_put_contents))
  13. {
  14. file_put_contents($filename,$content);
  15. }
  16. else fwrite($fp,$content);
  17. fclose($fp);
  18. }
  19. }
  20. function getsuffix($filename) //取得檔案名稱字尾
  21. {
  22. return end(explode(".",$filename));
  23. }
  24. function checksuffix($filename,$arr) //是否為允許類型(當前, 允許)
  25. {
  26. if(!is_array($arr))
  27. {
  28. $arr=explode(",",str_replace(" ","",$arr));
  29. }
  30. return in_array($filename,$arr) ? 1 : 0;
  31. }
  32. class image
  33. {
  34. var $src; //來源位址 var $newsrc; //新圖路徑(本地化後)
  35. var $allowtype=array(".gif",".jpg",".png",".jpeg"); //允許的圖片類型
  36. var $regif=0; //是否縮略GIF, 為0不處理
  37. var $keep=0; //是否保留來源檔案(1為保留, 0為MD5)
  38. var $ over=0; //是否可以覆蓋已存在的圖片,為0則不可覆蓋
  39. var $dir; //圖片來源目錄
  40. var $newdir; //處理後的目錄
  41. function __construct($olddir=null,$newdir=null)
  42. {
  43. $this->dir=$olddir ? $olddir : "./images/temp";
  44. $this->newdir=$this->newdir=$this->newdir=$this->newdir=$this->newdir=$ newdir ? $newdir : "./images/s";
  45. }
  46. function reNames($src)
  47. {
  48. $md5file=substr(md5($src),10,10 ).strrchr($src,"."); //MD5檔名後(例如:3293okoe.gif)
  49. $md5file=$this->w."_".$this->h."_" .$md5file; //處理後檔案名稱
  50. return $this->newdir."/".$md5file; //將來源圖片,MD5檔案名稱後儲存到新的目錄裡
  51. }
  52. function Mini($src,$w,$h,$q=80) //產生縮圖Mini(圖片位址, 寬度, 高度, 品質)
  53. {
  54. $this->src=$ src;
  55. $this->w=$w;
  56. $this->h=$h;
  57. if(strrchr($src,".")==".gif" && $this- >regif==0) //是否處理GIF圖
  58. {
  59. return $this->src;
  60. }
  61. if($this->keep==0) //是否保留來源文件,預設不保留
  62. {
  63. $newsrc=$this->reNames($src); //改名後的檔案位址
  64. }
  65. else //保持原名
  66. {
  67. $src=str_replace("\","/",$src);
  68. $newsrc=$this->newdir.strrchr($src,"/");
  69. }
  70. if(file_exists( $newsrc) && $this->over==0) //如果已存在,直接回傳位址
  71. {
  72. return $newsrc;
  73. }
  74. if(strstr($src,"http: //") && !strstr($src,$_SERVER['HTTP_HOST']))//如果是網路檔案,先儲存
  75. {
  76. $src=$this->getimg($src);
  77. }
  78. $arr=getimagesize($src); //取得圖片屬性
  79. $width=$arr[0];
  80. $height=$arr[1];
  81. $type= $arr[2];
  82. switch($type)
  83. {
  84. case 1: //1 = GIF,
  85. $im=imagecreatefromgif($src);
  86. break;
  87. case 2: //2 = JPG
  88. $im=imagecreatefromjpeg($src);
  89. break;
  90. case 3: //3 = PNG
  91. $im=imagecreatefrompng($src);
  92. break;
  93. default:
  94. return 0;
  95. }
  96. //處理縮圖
  97. $nim=imagecreatetruecolor($w,$h);
  98. $k1= round($h/$w,2);
  99. $k2=round($height/$width,2);
  100. if($k1 {
  101. $width_a=$ width;
  102. $height_a=round($width*$k1);
  103. $sw=0;
  104. $sh=($height-$height_a)/2;
  105. }
  106. else
  107. {
  108. $width_a=$height/$k1;
  109. $height_a=$height;
  110. $sw=($width-$width_a)/2;
  111. $sh🎜> $sh = 0;
  112. }
  113. // 產生圖片
  114. if(function_exists(imagecopyresampled))
  115. {
  116. imagecopyresampled($nim,$im,0,0,$swim,0$ sh,$w,$h,$width_a,$height_a);
  117. }
  118. else
  119. {
  120. imagecopyresized($nim,$im,0,0,$sw,$sh,$w ,$h,$width_a,$height_a);
  121. }
  122. if(!is_dir($this->newdir))
  123. {
  124. mkdir($this->newdir);
  125. }
  126. mkdir($this->newdir);
  127. }
  128. switch($type) //儲存圖片
  129. {
  130. case 1:
  131. $rs=imagegif($nim,$newsrc);
  132. break;
  133. 情況2 :
  134. $rs=imagejpeg($nim,$newsrc,$q);
  135. 中斷;
  136. 情況3:
  137. $rs=imagepng($nim,$newsrc);
  138. Break;
  139. 預設值:
  140. return 0;
  141. }
  142. return $newsrc; //回傳處理後路徑
  143. }
  144. function getimg($filename)
  145. {
  146. $md5file=$this->dir."/".substr(md5($filename) ,10,10).strrchr($filename,".");
  147. if(file_exists($md5file))
  148. {
  149. return $md5file;
  150. }
  151. //開始取得檔案,並回傳新路徑
  152. $img=file_get_contents($filename);
  153. if($img)
  154. {
  155. if(!is_dir($this->dir))
  156. {
  157. mkdir($this->dir);
  158. }
  159. savefile($md5file,$img);
  160. }
  161. savefile($md5file,$img);
  162. return $md5file;
  163. }
  164. }
  165. 函數reImg($src,$w,$h,$q) //轉換最大(檔名與結構不變)
  166. {
  167. $this->keep=1;
  168. return $this-> ;迷你($src,$w,$h,$q); //回傳產生的位址
  169. }
  170. }
  171. $image=new image();
  172. echo $image->reImg("images/zht.jpg", 75,75,80);
  173. echo "
    " ;
  174. echo $image->reImg("images/m8920.jpg",75,75,80);
echo "
";
echo $image->getimg("./ images/s/zht.jpg");?>

PHP


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn