ホームページ  >  記事  >  バックエンド開発  >  完全な画像アップロード php クラス

完全な画像アップロード php クラス

WBOY
WBOYオリジナル
2016-07-25 08:43:061001ブラウズ

このPHP画像アップロード機能は非常に完成度が高く、さまざまな画像アップロードのニーズを完全に満たすことができます

  1. <?php
  2. /**&#&*/
  3. classmk_imageupload {
  4. bar $ max_size; $max_height;
  5. var $max_main_height;
  6. var $last_ext;
  7. var $last_pid;
  8. var $last_uid;
  9. var $image_file;
  10. var $image_field;
  11. function __construct( $maxHeightMain, $maxHeightThumb, $destDir ){
  12. $this->max_size = (1024/2)*1000; // 750kb
  13. $this->allowed_types = array( 'jpeg', 'jpg', 'pjpeg', 'gif', 'png' );
  14. $this->extensions = array(
  15. 'image/jpeg' => '.jpg',
  16. '画像/gif' => '.gif',
  17. '画像/png' => ',
  18. 'image/pjpeg' => '.jpg'
  19. );
  20. $this->dest_dir = $destDir;
  21. $this->max_height = $maxHeightThumb;
  22. $this->max_main_height = $maxHeightMain ;
  23. }
  24. function putImage( $formname, $newName ){
  25. $this->image_field = $formname;
  26. if( $this->getImage() ){
  27. // エラーをチェックします
  28. if ( ! $this->checkType() )
  29. return $this->throwError(2);
  30. if ( !$this->checkFileSize() )
  31. return $this->throwError(1);
  32. // 画像を取得します
  33. $img = $this->image_file;
  34. // 捕捉を確認します
  35. if ( !$this->checkImageSize() )
  36. return $this->throwError(3);
  37. //画像の寸法を取得します
  38. $size = $this->getImageSize();
  39. $size['width'] = $size[0];
  40. $size['height'] = $size[1];
  41. $ratio = $this->max_height/$size['height'];
  42. $maxheight = $this->max_height;
  43. $maxwidth = $size['width'] * $ratio;
  44. // サムネイルを作成します
  45. $ s_t = $this->resizeImage( $size, $img, $maxwidth, $maxheight,$newName,'s' );
  46. if( $size['height'] > $this->max_main_height ){
  47. $ratio = $this->max_main_height/$size['height'];
  48. $maxheight = $this->max_main_height;
  49. $maxwidth = $size['width'] * $ratio;
  50. }else{
  51. $maxheight = $size['height'];
  52. $maxwidth = $size['width'];
  53. }
  54. // 大きく再スケールされたものを作成します
  55. $s_l = $this->resizeImage ( $size, $img, $maxwidth, $maxheight,$newName,'l' );
  56. // 一時ファイルを削除
  57. unlink($img['tmp_name']);
  58. if( $s_t && $s_l ) {
  59. $nm = split('_',$newName);
  60. $this->last_ext = $this->extensions[$size['mime']];
  61. $this->last_pid = $nm[ 0];
  62. $this->last_uid = $nm[1];
  63. return 'ok';
  64. }else{
  65. return $this->throwError( 4 );
  66. }
  67. }else{
  68. return $this->throwError( 2 );
  69. }
  70. }
  71. function raiseImage($size,$img,$maxwidth,$maxheight,$newName,$ext){
  72. // 作成サムネイル
  73. if($size['mime'] == "image/pjpeg" || $size['mime'] == "image/jpeg"){
  74. $new_img = imagecreatefromjpeg($img['tmp_name'] );
  75. }elseif($size['mime'] == "image/x-png" || $size['mime'] == "image/png"){
  76. $new_img = imagecreatefrompng($img[' tmp_name']);
  77. }elseif($size['mime'] == "image/gif"){
  78. $new_img = imagecreatefromgif($img['tmp_name']);
  79. }
  80. if (function_exists('imagecreatetruecolor ')){
  81. $resize_img = imagecreatetruecolor($maxwidth,$maxheight);
  82. }else{
  83. return("エラー: サーバーに GD ライブラリ バージョン 2+ があることを確認してください");
  84. }
  85. imagecopyresize($resize_img, $new_img, 0, 0, 0, 0, $maxwidth, $maxheight, $size['width'], $size['height']);
  86. if($size['mime' ] == "image/pjpeg" || $size['mime'] == "image/jpeg"){
  87. $success = ImageJpeg ($resize_img,$this->dest_dir.$newName.'_'.$ ext.$this->extensions[$size['mime']]);
  88. }elseif($size['mime'] == "image/x-png" || $size['mime'] == "image/png"){
  89. $success = ImagePNG ($resize_img,$this->dest_dir.$newName.'_'.$ext.$this->extensions[$size['mime']]);
  90. }elseif($size['mime'] == "image/gif"){
  91. $success = ImageGIF ($resize_img,$this->dest_dir.$newName.'_'.$ext.$this-> ;extensions[$size['mime']]);
  92. }
  93. // 一時的な画像を削除します
  94. ImageDestroy ($resize_img);
  95. ImageDestroy ($new_img);
  96. return $success;
  97. }
  98. function getImage() {
  99. if( isset($_FILES[$this->image_field]) && is_uploaded_file($_FILES[$this->image_field]['tmp_name']) ){
  100. $this->image_file = $_FILES[$ this->image_field];
  101. return true;
  102. }
  103. return false;
  104. }
  105. function returnImg(){
  106. return $this->image_file;
  107. }
  108. function getImageSize(){
  109. $img = $this ->returnImg();
  110. return getimagesize($img['tmp_name']);
  111. }
  112. function checkImageSize(){
  113. $size = $this->getImageSize();
  114. if( $size[ 1] max_height )
  115. return false;
  116. return true;
  117. }
  118. function checkFileSize(){
  119. $img = $this->returnImg();
  120. if( $img['size'] > $this->max_size )
  121. return false;
  122. return true;
  123. }
  124. function checkType(){
  125. $img = $this->returnImg();
  126. $type = split('/',$img ['type']);
  127. if( !in_array( $type[1], $this->allowed_types ) )
  128. return false;
  129. return true;
  130. }
  131. function throwError($val){
  132. switch($ val){
  133. ケース 1: return 'エラー: ファイル サイズが大きすぎます';
  134. ブレーク;
  135. ケース 2: リターン 'エラー: 不適切なファイル形式';
  136. ブレーク;
  137. ケース 3: リターン 'エラー: 画像が小さすぎます';
  138. Break;
  139. case 4: return 'エラー: 画像の作成中にエラーが発生しました';
  140. Break;
  141. }
  142. }
  143. }
  144. ?>
复制代

画像上传、php


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。