>백엔드 개발 >PHP 튜토리얼 >완전한 이미지 업로드 PHP 클래스

완전한 이미지 업로드 PHP 클래스

WBOY
WBOY원래의
2016-07-25 08:43:061019검색

이 PHP 이미지 업로드 기능은 매우 완벽하며 다양한 이미지 업로드 요구 사항을 완벽하게 충족할 수 있습니다

  1. /**************************************
  2. 시소동료 | http://seesaw.net
  3. 클라이언트:
  4. 파일:
  5. 설명:
  6. Copyright (C) 2008 Matt Kenefick(.com)
  7. ***** *********************************/
  8. class mk_imageUpload{
  9. var $max_size;
  10. var $allowed_types;
  11. var $thumb_height;
  12. var $dest_dir;
  13. var $extensions;
  14. var $max_height;
  15. var $max_main_height;
  16. var $last_ext;
  17. var $last_pid;
  18. var $last_uid;
  19. var $image_file;
  20. var $image_field;
  21. function __construct( $maxHeightMain, $maxHeightThumb, $destDir ){
  22. $this->max_size = (1024/2)*1000; // 750kb
  23. $this->allowed_types = array( 'jpeg', 'jpg', 'pjpeg', 'gif', 'png' );
  24. $this->extensions = array(
  25. '이미지/jpeg' => '.jpg',
  26. '이미지/gif' => '.gif',
  27. '이미지/png' => image/x-png' => '.png',
  28. 'image/pjpeg' => '.jpg'
  29. );
  30. $this->dest_dir = $destDir;
  31. $this->max_height = $maxHeightThumb;
  32. $this->max_main_height = $maxHeightMain;
  33. }
  34. function putImage( $formname, $newName ){
  35. $this-> ;image_field = $formname;
  36. if( $this->getImage() ){
  37. // 오류 확인
  38. if ( !$this->checkType() )
  39. return $this->throwError(2);
  40. if ( !$this->checkFileSize() )
  41. return $this->throwError(1);
  42. // 이미지 가져오기
  43. $img = $this->image_file;
  44. // 점유 확인
  45. if ( !$this->checkImageSize() )
  46. return $this ->throwError(3);
  47. // 이미지 크기 가져오기
  48. $size = $this->getImageSize();
  49. $size['width'] = $size[0] ;
  50. $size['height'] = $size[1];
  51. $ratio = $this->max_height/$size['height'];
  52. $maxheight = $this ->max_height;
  53. $maxwidth = $size['width'] * $ratio;
  54. // 썸네일 생성
  55. $s_t = $this->resizeImage( $size, $img , $maxwidth, $maxheight,$newName,'s' );
  56. if( $size['height'] > $this->max_main_height ){
  57. $ratio = $this->max_main_height/$size['height'];
  58. $maxheight = $this->max_main_height;
  59. $maxwidth = $size ['너비'] * $ratio;
  60. }else{
  61. $maxheight = $size['height'];
  62. $maxwidth = $size['width'];
  63. }
  64. // 대규모 재조정 생성
  65. $s_l = $this->resizeImage( $size, $img, $maxwidth, $maxheight,$newName,'l' );
  66. // 제거 임시 파일
  67. unlink($img['tmp_name']);
  68. if( $s_t && $s_l ){
  69. $nm = Split('_',$newName);
  70. $this->last_ext = $this->extensions[$size['mime']];
  71. $this->last_pid = $nm[0];
  72. $this->last_uid = $ nm[1];
  73. return 'ok';
  74. }else{
  75. return $this->throwError( 4 );
  76. }
  77. }else{
  78. return $this->throwError( 2 );
  79. }
  80. }
  81. 함수 resizeImage($size,$img,$maxwidth, $maxheight,$newName,$ext){
  82. // 썸네일 생성
  83. if($size['mime'] == "image/pjpeg" || $size['mime'] == "image /jpeg"){
  84. $new_img = imagecreatefromjpeg($img['tmp_name']);
  85. }elseif($size['mime'] == "image/x-png" || $size[' mime'] == "이미지/png"){
  86. $new_img = imagecreatefrompng($img['tmp_name']);
  87. }elseif($size['mime'] == "이미지/gif") {
  88. $new_img = imagecreatefromgif($img['tmp_name']);
  89. }
  90. if (function_exists('imagecreatetruecolor')){
  91. $resize_img = imagecreatetruecolor($maxwidth,$ maxheight);
  92. }else{
  93. return("오류: 서버에 GD 라이브러리 버전 2가 있는지 확인하세요. ");
  94. }
  95. imagecopyreized($resize_img, $new_img, 0, 0, 0, 0, $maxwidth, $maxheight, $size['width'], $size['height']);
  96. if( $size['mime'] == "이미지/pjpeg" || $size['mime'] == "이미지/jpeg"){
  97. $success = ImageJpeg ($resize_img,$this->dest_dir. $newName.'_'.$ext.$this->extensions[$size['mime']]);
  98. }elseif($size['mime'] == "이미지/x-png" | | $size['mime'] == "이미지/png"){
  99. $success = ImagePNG ($resize_img,$this->dest_dir.$newName.'_'.$ext.$this-> Extensions[$size['mime']]);
  100. }elseif($size['mime'] == "image/gif"){
  101. $success = ImageGIF ($resize_img,$this-> dest_dir.$newName.'_'.$ext.$this->extensions[$size['mime']]);
  102. }
  103. // 임시 이미지 제거
  104. ImageDestroy ($ resize_img);
  105. ImageDestroy($new_img);
  106. return $success;
  107. }
  108. function getImage(){
  109. if( isset($_FILES[$this- >image_field]) && is_uploaded_file($_FILES[$this->image_field]['tmp_name']) ){
  110. $this->image_file = $_FILES[$this->image_field];
  111. return true;
  112. }
  113. return false;
  114. }
  115. 함수 returnImg(){
  116. return $this->image_file;
  117. }
  118. 함수 getImageSize(){
  119. $img = $this->returnImg();
  120. return getimagesize($img['tmp_name']);
  121. }
  122. 함수 checkImageSize( ){
  123. $size = $this->getImageSize();
  124. if( $size[1] < $this->max_height )
  125. return false;
  126. return true;
  127. }
  128. function checkFileSize(){
  129. $img = $this->returnImg();
  130. if( $img['size'] > $this->max_size )
  131. return false;
  132. return true;
  133. }
  134. function checkType(){
  135. $img = $this->returnImg();
  136. $type = Split('/',$img['type']);
  137. if( !in_array( $type[ 1], $this->allowed_types ) )
  138. false 반환;
  139. true 반환;
  140. }
  141. 함수 throwError($val){
  142. switch($val){
  143. 사례 1: return '오류: 파일 크기가 너무 큼';
  144. break;
  145. 사례 2: return '오류: 부적절한 파일 형식';
  146. break;
  147. 사례 3: return '오류 : 이미지가 너무 작습니다.';
  148. break;
  149. 사례 4: return '오류: 이미지를 생성하는 동안 오류가 발생했습니다.';
  150. break;
  151. }
  152. }
  153. }
  154. ?>
复代码

사진 이미지, PHP


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