このPHP画像アップロード機能は非常に完成度が高く、さまざまな画像アップロードのニーズを完全に満たすことができます
- <?php
- /**&#&*/
- classmk_imageupload {
-
- bar $ max_size; $max_height;
- var $max_main_height;
-
- var $last_ext;
- var $last_pid;
- var $last_uid;
-
- var $image_file;
- var $image_field;
-
- function __construct( $maxHeightMain, $maxHeightThumb, $destDir ){
- $this->max_size = (1024/2)*1000; // 750kb
- $this->allowed_types = array( 'jpeg', 'jpg', 'pjpeg', 'gif', 'png' );
- $this->extensions = array(
- 'image/jpeg' => '.jpg',
- '画像/gif' => '.gif',
- '画像/png' => ',
- 'image/pjpeg' => '.jpg'
- );
- $this->dest_dir = $destDir;
- $this->max_height = $maxHeightThumb;
- $this->max_main_height = $maxHeightMain ;
- }
-
- function putImage( $formname, $newName ){
- $this->image_field = $formname;
- if( $this->getImage() ){
-
- // エラーをチェックします
- if ( ! $this->checkType() )
- return $this->throwError(2);
-
- if ( !$this->checkFileSize() )
- return $this->throwError(1);
-
-
- // 画像を取得します
- $img = $this->image_file;
-
- // 捕捉を確認します
- if ( !$this->checkImageSize() )
- return $this->throwError(3);
-
- //画像の寸法を取得します
- $size = $this->getImageSize();
- $size['width'] = $size[0];
- $size['height'] = $size[1];
- $ratio = $this->max_height/$size['height'];
-
- $maxheight = $this->max_height;
- $maxwidth = $size['width'] * $ratio;
-
- // サムネイルを作成します
- $ s_t = $this->resizeImage( $size, $img, $maxwidth, $maxheight,$newName,'s' );
-
- if( $size['height'] > $this->max_main_height ){
- $ratio = $this->max_main_height/$size['height'];
- $maxheight = $this->max_main_height;
- $maxwidth = $size['width'] * $ratio;
- }else{
- $maxheight = $size['height'];
- $maxwidth = $size['width'];
- }
-
- // 大きく再スケールされたものを作成します
- $s_l = $this->resizeImage ( $size, $img, $maxwidth, $maxheight,$newName,'l' );
-
- // 一時ファイルを削除
- unlink($img['tmp_name']);
-
- if( $s_t && $s_l ) {
- $nm = split('_',$newName);
- $this->last_ext = $this->extensions[$size['mime']];
- $this->last_pid = $nm[ 0];
- $this->last_uid = $nm[1];
- return 'ok';
- }else{
- return $this->throwError( 4 );
- }
- }else{
- return $this->throwError( 2 );
- }
- }
-
- function raiseImage($size,$img,$maxwidth,$maxheight,$newName,$ext){
- // 作成サムネイル
- if($size['mime'] == "image/pjpeg" || $size['mime'] == "image/jpeg"){
- $new_img = imagecreatefromjpeg($img['tmp_name'] );
- }elseif($size['mime'] == "image/x-png" || $size['mime'] == "image/png"){
- $new_img = imagecreatefrompng($img[' tmp_name']);
- }elseif($size['mime'] == "image/gif"){
- $new_img = imagecreatefromgif($img['tmp_name']);
- }
-
- if (function_exists('imagecreatetruecolor ')){
- $resize_img = imagecreatetruecolor($maxwidth,$maxheight);
- }else{
- return("エラー: サーバーに GD ライブラリ バージョン 2+ があることを確認してください");
- }
-
- imagecopyresize($resize_img, $new_img, 0, 0, 0, 0, $maxwidth, $maxheight, $size['width'], $size['height']);
- if($size['mime' ] == "image/pjpeg" || $size['mime'] == "image/jpeg"){
- $success = ImageJpeg ($resize_img,$this->dest_dir.$newName.'_'.$ ext.$this->extensions[$size['mime']]);
- }elseif($size['mime'] == "image/x-png" || $size['mime'] == "image/png"){
- $success = ImagePNG ($resize_img,$this->dest_dir.$newName.'_'.$ext.$this->extensions[$size['mime']]);
- }elseif($size['mime'] == "image/gif"){
- $success = ImageGIF ($resize_img,$this->dest_dir.$newName.'_'.$ext.$this-> ;extensions[$size['mime']]);
- }
-
- // 一時的な画像を削除します
- ImageDestroy ($resize_img);
- ImageDestroy ($new_img);
-
- return $success;
- }
-
- function getImage() {
- if( isset($_FILES[$this->image_field]) && is_uploaded_file($_FILES[$this->image_field]['tmp_name']) ){
- $this->image_file = $_FILES[$ this->image_field];
- return true;
- }
- return false;
- }
-
- function returnImg(){
- return $this->image_file;
- }
-
- function getImageSize(){
- $img = $this ->returnImg();
-
- return getimagesize($img['tmp_name']);
- }
-
- function checkImageSize(){
- $size = $this->getImageSize();
-
- if( $size[ 1] max_height )
- return false;
- return true;
- }
-
- function checkFileSize(){
- $img = $this->returnImg();
-
- if( $img['size'] > $this->max_size )
- return false;
- return true;
- }
-
- function checkType(){
- $img = $this->returnImg();
-
- $type = split('/',$img ['type']);
- if( !in_array( $type[1], $this->allowed_types ) )
- return false;
- return true;
- }
-
- function throwError($val){
- switch($ val){
- ケース 1: return 'エラー: ファイル サイズが大きすぎます';
- ブレーク;
- ケース 2: リターン 'エラー: 不適切なファイル形式';
- ブレーク;
- ケース 3: リターン 'エラー: 画像が小さすぎます';
- Break;
- case 4: return 'エラー: 画像の作成中にエラーが発生しました';
- Break;
- }
- }
-
- }
-
- ?>
复制代
|