ホームページ  >  記事  >  バックエンド開発  >  PHP 画像アップロード クラス。ウォーターマーク日付フォルダー生成のサムネイルをサポートし、複数のファイルのアップロードをサポートします。

PHP 画像アップロード クラス。ウォーターマーク日付フォルダー生成のサムネイルをサポートし、複数のファイルのアップロードをサポートします。

WBOY
WBOYオリジナル
2016-07-25 08:46:22932ブラウズ
このトピックは、2015-11-18 08:23 に Xiaobei によって移動されました
{Y}{m}{n} を使用して現在の日付を変更できます
  1. set_dir(dirname(__FILE__).'/upload/','{y}/{m}'); // 保存パス, {y}{m}{d} オプションをサポート
  2. $up->set_thumb(100,80); // 単位はピクセルです
  3. $up->set_watermark(dirname(__FILE__). '/jblog /images/watermark.png',6,90); //ウォーターマーク設定
  4. $fs = $up->execute(); //実行開始
  5. //クラス状況をテストするためのビュー
  6. }
  7. ?>
  8. /////フォームを表示----------
  9. test
  10. //複数の画像アップロードをサポート
  11. */
  12. class Upload {
  13. var $dir ; //添付ファイルが保存される物理ディレクトリ
  14. var $time; // カスタマイズされたファイルのアップロード時間
  15. var $field // アップロードコントロール名
  16. // 最大サイズ許可されるファイル サイズ、単位は KB です
  17. var $thumb_width; //サムネイルの幅
  18. var $watermark_file; //ウォーターマーク画像のアドレス
  19. var $watermark_trans; ;//透かしの透明度
  20. //コンストラクター
  21. //$types: アップロードできるファイルタイプ、$maxsize: 許可されるサイズ、$field: アップロードコントロール名、$time: カスタムアップロード時間
  22. function Upload($types = ' jpg|png', $maxsize = 1024, $field = 'attach', $time = '') {
  23. $this->allow_types =explode('|',$types);
  24. $ this->maxsize = $maxsize * 1024;
  25. $this->field = $field;
  26. $this->time ? $time : time();
  27. // 特定の保存ディレクトリを設定して作成します
  28. // $basedir: ベース ディレクトリ、物理パスである必要があります
  29. //$filedir: カスタム サブディレクトリ、利用可能なパラメータ {y}、{m}、{d}
  30. function set_dir($basedir,$filedir = '') {
  31. $dir = $basedir;
  32. !is_dir($dir) && @mkdir($dir,0777);
  33. if (!empty($filedir)) {
  34. $filedir = str_replace(array('{ y}','{m}) ','{d}'),array(date('Y',$this->time),date('m',$this->time),date(' d',$this->time; time)),strto lower($filedir));//string_replace を使用して {y} {m} {d} タグを置き換えます
  35. $dirs =explode('/',$filedir );
  36. foreach ($dirs as $d); {
  37. !empty($d) && $dir .= $d.'/';
  38. !is_dir($dir) && @mkdir($dir,0777)
  39. $this->dir = $ dir;
  40. }
  41. //画像のサムネイル設定、サムネイルを生成しない場合は設定不要
  42. //$width: サムネイルの幅, $height: サムネイルの高さ
  43. function set_thumb ($width = 0, $height = 0) {
  44. $this->thumb_width = $width;
  45. $this->thumb_height = $height; }
  46. //画像のウォーターマーク設定、生成されない場合はウォーターマークを追加する必要はありません
  47. //$file:ウォーターマーク画像、$pos: ウォーターマークの位置、$trans: ウォーターマークの透明度
  48. function set_watermark ($file, $pos = 6, $trans = 80) {
  49. $this->watermark_file = $ file; = $pos;
  50. $this->watermark_trans = $trans;
  51. /*——————————————————————- ファイルのアップロードを実行し、処理後にアップロードの成功または失敗を含むファイル情報の配列を返します。
  52. ここで: name はファイル名です。アップロードが成功した場合は、サーバーにアップロードされたファイル名になります。dir は、サーバー上に添付ファイルを保存するための物理パスです。アップロードが失敗した場合、サイズは添付ファイルのサイズです。この値
  53. フラグの存在はステータス識別子であり、1 は成功を意味し、-1 はファイル タイプが許可されていないことを意味します。 -2 はファイル サイズが
  54. を超えていることを意味します ———————————————————————– */
  55. functionexecute() {
  56. $files = array(); //ファイル情報が正常にアップロードされました
  57. $field = $this->field;
  58. $keys = array_keys($_FILES[$field]['name' ]);
  59. foreach ($keys as $key) {
  60. if (!$_FILES [$field]['name'][$key]) 続行;
  61. $fileext = $this->fileext($_FILES[ $field]['name'][$key]); // ファイルを取得します。 extension
  62. $filename = date('Ymdhis',$this->time).mt_rand(10,99).'.'.$ fileext; // ファイル名を生成します
  63. $filedir = $this->dir; / /添付ファイルが保存される実際のディレクトリ
  64. $filesize = $_FILES[$field]['size'][$key] //ファイル サイズ
  65. //許可されないファイル タイプ
  66. if (!in_array($fileext,$ this->allow_types)) {
  67. $files[$key]['name'] = $_FILES[$field]['name'][$ key];
  68. $files[$key]['flag'] = -1;
  69. 継続
  70. }
  71. //ファイル サイズを超えました
  72. if ($filesize > $this->maxsize) {
  73. $files[ $key]['name'] = $_FILES[$field][ 'name'][$key];
  74. $files[$key]['name'] = $filesize;
  75. 続行
  76. ; [$key]['name'] = $filename;
  77. $files[$key]['dir'] = $filedir;
  78. //保存ファイルをアップロードして一時ファイルを削除します
  79. if (is_uploaded_file($_FILES[$field]['tmp_name'][$key])) {
  80. move_uploaded_file($_FILES [$field]['tmp_name'][$key],$filedir .$filename);
  81. @unlink($_FILES[$field]['tmp_name'][$key]);
  82. $files[$key][ 'flag'] = 1; //画像に透かしを追加しますここでのデモは jpg と png のみをサポートします (gif が生成されるとフレームが失われます)
  83. if (in_array($fileext,array('jpg ','png'))) {
  84. if ($ this->thumb_width) {
  85. if ($this->create_thumb($filedir.$filename,$filedir.'thumb_'.$filename)) {
  86. $ files[$key]['thumb'] = 'thumb_ '.$filename; //サムネイルファイル名
  87. }
  88. }
  89. $this->create_watermark($filedir.$filename)
  90. }
  91. }
  92. }
  93. return $files }
  94. // サムネイルを作成します。同じ拡張子のサムネイルを生成します
  95. //$src_file: ソース画像のパス, $thumb_file: サムネイルのパス
  96. function create_thumb ($src_file,$thumb_file) {
  97. $t_width = $this->thumb_width;
  98. $t_height = $this- >thumb_height;
  99. if (!file_exists($src_file)) return false;
  100. $src_info = getImageSize($src_file); / / ソース画像がサムネイル以下の場合、ソース画像をコピーしますサムネイルとして表示されるため、
  101. if ($src_info[0] if (! copy($src_file,$thumb_file)) {
  102. の操作が不要になります。 return false;
  103. }
  104. return true
  105. }
  106. //サムネイルのサイズを比例的に計算します
  107. if (($src_info[0]-$t_width) > ($src_info [1]-$t_height)) {
  108. $t_height = ($t_width / $src_info[0]) * $src_info[1];
  109. $t_width = ($t_height / $src_info[1]) * $src_info[0] }
  110. //ファイル拡張子を取得します
  111. $fileext = $this->fileext($src_file);
  112. case 'jpg' :
  113. $src_img = ImageCreateFromJPEG($src_file); case 'png' :
  114. $src_img = ImageCreateFromPNG($src_file);
  115. case 'gif' :
  116. $src_img = ImageCreateFromGIF($src_file); // トゥルーカラーのサムネイル画像を作成します
  117. $thumb_img = @ImageCreateTrueColor($t_width,$t_height);
  118. //ImageCopyResampled 関数でコピーされた画像の方が滑らかなので優先されます
  119. if (function_exists('imagecopyresampled')) {
  120. @ImageCopyResampled($thumb_img,$src_img, 0,0,0,0,$t_width,$t_height,$src_info[0],$src_info[1]);
  121. } else {
  122. @ImageCopyResize($thumb_img,$src_img,0,0,0,0,$ t_width,$t_height,$src_info[0],$src_info[1]);
  123. }
  124. //サムネイルを生成
  125. switch ($fileext) {
  126. case 'jpg' :
  127. ImageJPEG($thumb_img,$thumb_file); ;
  128. case 'gif' :
  129. ImageGIF($thumb_img,$thumb_file);
  130. ImagePNG($thumb_img,$thumb_file)
  131. }
  132. // 一時的な画像を破棄します
  133. return true //ファイルが存在しない場合は、 return
  134. if (!file_exists($this->watermark_file) || !file_exists($file)) return
  135. if (!function_exists('getImageSize')) return;
  136. //GD がサポートするファイル タイプを確認します
  137. $gd_allow_types = array();
  138. if (function_exists('ImageCreateFromGIF')) $gd_allow_types['image/gif'] = 'ImageCreateFromGIF'
  139. if (function_exists('ImageCreateFromPNG') ) $gd_allow_types['image/png'] = 'ImageCreateFromPNG';
  140. if (function_exists('ImageCreateFromJPEG')) $gd_allow_types['image/jpeg'] = 'ImageCreateFromJPEG' // ファイル情報を取得します
  141. $fileinfo = getImageSize($file) ;
  142. $wminfo = getImageSize($this->watermark_file);
  143. if ($fileinfo[0] < $wminfo[0] || $fileinfo[1] < $wminfo[1] ) return;
  144. if (array_key_exists($fileinfo['mime'],$gd_allow_types)) {
  145. if (array_key_exists($wminfo['mime'],$gd_allow_types)) {
  146. // ファイルから画像を作成
  147. $ temp = $gd_allow_types[ $fileinfo['mime']]($file);
  148. $temp_wm = $gd_allow_types[$wminfo['mime']]($this->watermark_file)
  149. //ウォーターマークの位置
  150. スイッチ($this-> ;watermark_pos) {
  151. case 1 : // 左上
  152. $dst_x = 0; $dst_y = 0;
  153. case 2 : // 中央上
  154. $dst_x = ($fileinfo[0] - $ wminfo[0]) /2; $dst_y = 0;
  155. ケース 3 : //右上
  156. $dst_x = $dst_y = 0;
  157. 左下
  158. ; dst_x = 0; $dst_y = $fileinfo[1];
  159. ケース 5: //下中央
  160. $dst_y = $fileinfo[1] ]; ブレーク;
  161. ケース 6: //右下
  162. $dst_y = $fileinfo[1]-$wminfo[1];ランダム
  163. $ dst_x = mt_rand(0,$fileinfo[0]-$wminfo[0]); $dst_y = mt_rand(0,$fileinfo[1]-$wminfo[1])
  164. }
  165. if (function_exists( 'ImageAlphaBlending' )) ImageAlphaBlending($temp_wm,True); //画像のカラーブレンドモードを設定します
  166. if (function_exists('ImageSaveAlpha')) ImageSaveAlpha($temp_wm,True); //完全なアルファチャンネル情報を保存します
  167. //画像の場合 ウォーターマークを追加します
  168. if (function_exists('imageCopyMerge')) {
  169. ImageCopyMerge($temp,$temp_wm,$dst_x,$dst_y,0,0,$wminfo[0],$wminfo[1], $this->watermark_trans );else {
  170. ImageCopyMerge($temp,$temp_wm,$dst_x,$dst_y,0,0,$wminfo[0],$wminfo[1])
  171. }
  172. //画像を保存
  173. switch ($fileinfo[' mime ']) {
  174. ケース 'image/jpeg' :
  175. @imageJPEG($temp,$file)
  176. ケース 'image/png' :
  177. ブレーク; case 'image/gif' :
  178. @imageGIF($temp,$file);
  179. }
  180. //ゼロタイム画像を破棄します
  181. @imageDestroy($temp)
  182. }
  183. }
  184. }
  185. //ファイル拡張子を取得します
  186. function fileext($filename) {
  187. return strto lower(substr(strrchr($filename,'.'),1,10));
  188. }
  189. }
  190. ?>
  191. コードをコピー
画像アップロード、PHP
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。