>백엔드 개발 >PHP 튜토리얼 >PHP 이미지 업로드 클래스 및 썸네일 생성

PHP 이미지 업로드 클래스 및 썸네일 생성

WBOY
WBOY원래의
2016-07-25 08:45:471063검색
  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. 비공개 함수 __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. 스위치 ($ _type){
  25. case 'image/gif':
  26. if (self::$a==NULL)
  27. self::$a = new imgUpload($_formName);
  28. break;
  29. 케이스 '이미지/pjpeg':
  30. if (self::$a==NULL)
  31. self::$a = new imgUpload($_formName);
  32. break;
  33. 케이스 ' image/ x-png':
  34. if (self::$a==NULL)
  35. self::$a = new imgUpload($_formName);
  36. break;
  37. 기본값:
  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. 스위치($_format){
  51. 케이스 'B':
  52. return $_FILES[$this- >formName ]['size'];
  53. break;
  54. case 'K':
  55. return round($_FILES[$this->formName]['size'] / 1024);
  56. break;
  57. 케이스 '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 = 폭발('.',$_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. 공개 함수 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 = ''; //目标图 Images高
  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; //判断如果缩略图用于logo,将对其进行裁减
  136. if ('s_' == $_dstChar) {
  137. $src_x = $src_w * 0.10;
  138. $src_y = $src_h * 0.10;
  139. $src_w *= 0.8;
  140. $src_h *= 0.8;
  141. }
  142. //判断图文类型并创建对应新图文
  143. 스위치($_date[2 ]){
  144. 사례 1:
  145. $src_im = imagecreatefromgif($_srcImage);
  146. 중단;
  147. 사례 2:
  148. $src_im = imagecreatefromjpeg($_srcImage);
  149. 중단;
  150. 사례 3:
  151. $src_im = imagecreatefrompng($_srcImage);
  152. 중단;
  153. 사례 8:
  154. $src_im = imagecreatefromwbmp($_srcImage);
  155. 중단;
  156. }
  157. //创建一幅新图이미지
  158. if ($_date[2]==1) { //gif无法应用imagecreatetruecolor
  159. $dst_im = imagecreate($dst_w, $dst_h);
  160. }else {
  161. $dst_im = imagecreatetruecolor($dst_w, $dst_h);
  162. }
  163. //이 이미지의 썸네일 복사
  164. // $bg = imagecolorallocate($dst_im,255,255,0);
  165. imagecopyreized($dst_im,$src_im, 0, 0, $ src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h );
  166. //이미지 앤티앨리어스
  167. imageantialias($dst_im, true);
  168. 스위치($_date [2] ) {
  169. 사례 1:
  170. $cr = imagegif($dst_im, $this->directory.$this->doUpFile.$_dstChar.".".$_ext, 100);
  171. break ;
  172. 사례 2:
  173. $cr = imagejpeg($dst_im, $this->directory.$this->doUpFile.$_dstChar.".".$_ext, 100);
  174. break;
  175. 케이스 3://imagepng에 문제가 있으니 여기서 대신 imagejpg를 사용하세요
  176. $cr = imagejpeg($dst_im, $this->directory.$this->doUpFile.$_dstChar." . ".$_ext, 100);
  177. break;
  178. }
  179. // $cr = imagejpeg($dst_im, $this->directory.$_dstChar.$this->doUpFile, 90) ;
  180. if ($cr) {
  181. $this->sm_File = $this->directory.$this->doUpFile.$_dstChar.".".$_ext;
  182. return $this->sm_File;
  183. }else {
  184. return false;
  185. }
  186. }
  187. imagedestroy($dst_im);
  188. imagedestroy($cr);
  189. }
  190. //업로드된 파일 이름 가져오기
  191. public function getUpFile(){
  192. if ($this->doUpFile!='') {
  193. $_ext = $this-> ;getExt ();
  194. return $this->doUpFile.".".$_ext;
  195. }else {
  196. return false;
  197. }
  198. }
  199. / /Get 업로드된 파일의 전체 경로
  200. public function getFilePatch(){
  201. if ($this->doUpFile!='') {
  202. $_ext = $this->getExt();
  203. return $this->directory.$this->doUpFile.".".$_ext;
  204. }else {
  205. return false;
  206. }
  207. }
  208. / /썸네일 파일의 전체 경로 가져오기
  209. public function getThumb(){
  210. if ($this->sm_File!='') {
  211. return $this->sm_File;
  212. } else {
  213. return false;
  214. }
  215. }
  216. //업로드된 파일의 경로를 가져옵니다.
  217. public function getDirectory(){
  218. if ($this->directory!= '') {
  219. return $this->directory;
  220. }else {
  221. return false;
  222. }
  223. }
  224. }
  225. ?>
코드 복사

이미지 업로드, PHP


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.