当前位置:Gxlcms > PHP教程 > PHP图片上传并生成缩略图类

PHP图片上传并生成缩略图类

时间:2021-07-01 10:21:17 帮助过:3人阅读

  1. /**
  2. * 上传图片
  3. */
  4. class imgUpload{
  5. static protected $a;
  6. protected $formName; //表单名称
  7. protected $directory; //文件上传至目录
  8. protected $maxSize; //最大文件上传大小
  9. protected $canUpload; //是否可以上传
  10. protected $doUpFile; //上传的文件名
  11. protected $sm_File; //缩略图名称
  12. private function __construct($_formName='file', $_directory='./images/uploads/', $_maxSize=1048576){ //1024*1024=1M
  13. //初始化参数
  14. $this->formName = $_formName;
  15. $this->directory = $_directory;
  16. $this->maxSize = $_maxSize;
  17. $this->canUpload = true;
  18. $this->doUpFile = '';
  19. $this->sm_File = '';
  20. }
  21. //判断图片是否属于允许格式内
  22. static public function Type($_formName='file'){
  23. $_type = $_FILES[$_formName]['type'];
  24. switch ($_type){
  25. case 'image/gif':
  26. if (self::$a==NULL)
  27. self::$a = new imgUpload($_formName);
  28. break;
  29. case 'image/pjpeg':
  30. if (self::$a==NULL)
  31. self::$a = new imgUpload($_formName);
  32. break;
  33. case 'image/x-png':
  34. if (self::$a==NULL)
  35. self::$a = new imgUpload($_formName);
  36. break;
  37. default:
  38. self::$a = false;
  39. }
  40. return self::$a;
  41. }
  42. //获取文件大小
  43. public function getSize($_format='K'){
  44. if ($this->canUpload) {
  45. if (0 == $_FILES[$this->formName]['size']) {
  46. $this->canUpload = false;
  47. return $this->canUpload;
  48. break;
  49. }
  50. switch ($_format){
  51. case 'B':
  52. return $_FILES[$this->formName]['size'];
  53. break;
  54. case 'K':
  55. return round($_FILES[$this->formName]['size'] / 1024);
  56. break;
  57. case 'M':
  58. return round($_FILES[$this->formName]['size'] / (1024*1024),2);
  59. break;
  60. }
  61. }
  62. }
  63. //获取文件类型
  64. public function getExt(){
  65. if ($this->canUpload) {
  66. $_name = $_FILES[$this->formName]['name'];
  67. $_nameArr = explode('.',$_name);
  68. $_count = count($_nameArr)-1;
  69. }
  70. return $_nameArr[$_count];
  71. }
  72. //获取文件名称
  73. public function getName(){
  74. if ($this->canUpload) {
  75. return $_FILES[$this->formName]['name'];
  76. }
  77. }
  78. //新建文件名
  79. public function newName(){
  80. return date('YmdHis').rand(0,9);
  81. }
  82. //上传文件
  83. public function upload(){
  84. if ($this->canUpload)
  85. {
  86. $_getSize = $this->getSize('B');
  87. if (!$_getSize)
  88. {
  89. return $_getSize;
  90. break;
  91. }
  92. else
  93. {
  94. $_newName = $this->newName();
  95. $_ext = $this->getExt();
  96. $_doUpload = move_uploaded_file($_FILES[$this->formName]['tmp_name'], $this->directory.$_newName.".".$_ext);
  97. if ($_doUpload)
  98. {
  99. $this->doUpFile = $_newName;
  100. }
  101. return $_doUpload;
  102. }
  103. }
  104. }
  105. //创建缩略图
  106. public function thumb($_dstChar='_m', $_max_len=320){ //$_dstChar:_m , _s
  107. if ($this->canUpload && $this->doUpFile != "") {
  108. $_ext = $this->getExt();
  109. $_srcImage = $this->directory.$this->doUpFile.".".$_ext;
  110. //得到图片信息数组
  111. $_date = getimagesize($_srcImage, &$info);
  112. $src_w = $_date[0]; //源图片宽
  113. $src_h = $_date[1]; //源图片高
  114. $src_max_len = max($src_w, $src_h); //求得长边
  115. $src_min_len = min($src_w, $src_h); //求得短边
  116. $dst_w = ''; //目标图片宽
  117. $dst_h = ''; //目标图片高
  118. //宽高按比例缩放,最长边不大于$_max_len
  119. if ($src_max_len>$_max_len)
  120. {
  121. $percent = $src_min_len / $src_max_len;
  122. if ($src_w == $src_max_len)
  123. {
  124. $dst_w = $_max_len;
  125. $dst_h = $percent * $dst_w;
  126. }
  127. else
  128. {
  129. $dst_h = $_max_len;
  130. $dst_w = $percent * $dst_h;
  131. }
  132. }
  133. else
  134. {
  135. $dst_w = $src_w;
  136. $dst_h = $src_h;
  137. }
  138. //建立缩略图时,源图片的位置
  139. $src_x = '';
  140. $src_y = '';
  141. //判断如果缩略图用于logo,将对其进行裁减
  142. if ('s_' == $_dstChar) {
  143. $src_x = $src_w * 0.10;
  144. $src_y = $src_h * 0.10;
  145. $src_w *= 0.8;
  146. $src_h *= 0.8;
  147. }
  148. //判断图片类型并创建对应新图片
  149. switch ($_date[2]){
  150. case 1:
  151. $src_im = imagecreatefromgif($_srcImage);
  152. break;
  153. case 2:
  154. $src_im = imagecreatefromjpeg($_srcImage);
  155. break;
  156. case 3:
  157. $src_im = imagecreatefrompng($_srcImage);
  158. break;
  159. case 8:
  160. $src_im = imagecreatefromwbmp($_srcImage);
  161. break;
  162. }
  163. //创建一幅新图像
  164. if ($_date[2]==1) { //gif无法应用imagecreatetruecolor
  165. $dst_im = imagecreate($dst_w, $dst_h);
  166. }else {
  167. $dst_im = imagecreatetruecolor($dst_w, $dst_h);
  168. }
  169. //对这副图像进行缩略图copy
  170. // $bg = imagecolorallocate($dst_im,255,255,0);
  171. imagecopyresized($dst_im,$src_im, 0, 0, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h );
  172. //对图片进行抗锯齿操作
  173. imageantialias($dst_im, true);
  174. switch ($_date[2]) {
  175. case 1:
  176. $cr = imagegif($dst_im, $this->directory.$this->doUpFile.$_dstChar.".".$_ext, 100);
  177. break;
  178. case 2:
  179. $cr = imagejpeg($dst_im, $this->directory.$this->doUpFile.$_dstChar.".".$_ext, 100);
  180. break;
  181. case 3://imagepng有问题,所以在这里用imagejpg代替
  182. $cr = imagejpeg($dst_im, $this->directory.$this->doUpFile.$_dstChar.".".$_ext, 100);
  183. break;
  184. }
  185. // $cr = imagejpeg($dst_im, $this->directory.$_dstChar.$this->doUpFile, 90);
  186. if ($cr) {
  187. $this->sm_File = $this->directory.$this->doUpFile.$_dstChar.".".$_ext;
  188. return $this->sm_File;
  189. }else {
  190. return false;
  191. }
  192. }
  193. imagedestroy($dst_im);
  194. imagedestroy($cr);
  195. }
  196. //得到上传后的文件名
  197. public function getUpFile(){
  198. if ($this->doUpFile!='') {
  199. $_ext = $this->getExt();
  200. return $this->doUpFile.".".$_ext;
  201. }else {
  202. return false;
  203. }
  204. }
  205. //得到上传后的文件全路径
  206. public function getFilePatch(){
  207. if ($this->doUpFile!='') {
  208. $_ext = $this->getExt();
  209. return $this->directory.$this->doUpFile.".".$_ext;
  210. }else {
  211. return false;
  212. }
  213. }
  214. //得到缩略图文件全路径
  215. public function getThumb(){
  216. if ($this->sm_File!='') {
  217. return $this->sm_File;
  218. }else {
  219. return false;
  220. }
  221. }
  222. //得到上传文件的路径
  223. public function getDirectory(){
  224. if ($this->directory!='') {
  225. return $this->directory;
  226. }else {
  227. return false;
  228. }
  229. }
  230. }
  231. ?>

图片上传, PHP

人气教程排行