当前位置 : 主页 > 网络编程 > PHP >

一个完整的图片上传php类

来源:互联网 收集:自由互联 发布时间:2021-07-03
这个php图片上传类功能非常完善,完全可以满足各种图片上传需求 ?php/************************************** seesaw associates | http://seesaw.net client: file: description: Copyright (C) 2008 Matt Kenefick(.com)*****

这个php图片上传类功能非常完善,完全可以满足各种图片上传需求

<?php
/**************************************
 seesaw associates | http://seesaw.net
  
 client:
 file:
 description:
  
 Copyright (C) 2008 Matt Kenefick(.com)
**************************************/
  
class mk_imageUpload{
  
    var $max_size;
    var $allowed_types;
    var $thumb_height;
    var $dest_dir;
    var $extensions;
    var $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',
                                'image/gif'         =>       '.gif',
                                'image/png'         =>       '.png',
                                'image/x-png'       =>       '.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() ){
  
            // Check for errors
            if ( !$this->checkType() )
                return $this->throwError(2);
  
            if ( !$this->checkFileSize() )
                return $this->throwError(1);
  
  
            // Get Image
            $img = $this->image_file;
  
            // Check seize
            if ( !$this->checkImageSize() )
                return $this->throwError(3);
  
            // Get image dimensinos
            $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;
  
            // Create Thumbnail
            $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'];
            }
  
            // Create Large rescaled
            $s_l = $this->resizeImage( $size, $img, $maxwidth, $maxheight,$newName,'l' );
  
            // remove temporary file
            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 resizeImage($size,$img,$maxwidth,$maxheight,$newName,$ext){
        // Create a thumbnail
        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')){
            $resized_img = imagecreatetruecolor($maxwidth,$maxheight);
        }else{
            return("Error: Please make sure your server has GD library ver 2+");
        }
  
        imagecopyresized($resized_img, $new_img, 0, 0, 0, 0, $maxwidth, $maxheight, $size['width'], $size['height']);
        if($size['mime'] == "image/pjpeg" || $size['mime'] == "image/jpeg"){
            $success = ImageJpeg ($resized_img,$this->dest_dir.$newName.'_'.$ext.$this->extensions[$size['mime']]);
        }elseif($size['mime'] == "image/x-png" || $size['mime'] == "image/png"){
            $success = ImagePNG ($resized_img,$this->dest_dir.$newName.'_'.$ext.$this->extensions[$size['mime']]);
        }elseif($size['mime'] == "image/gif"){
            $success = ImageGIF ($resized_img,$this->dest_dir.$newName.'_'.$ext.$this->extensions[$size['mime']]);
        }
  
        // Remove temporary images
        ImageDestroy ($resized_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] < $this->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){
            case 1: return 'Error: File size is too large';
                    break;
            case 2: return 'Error: Improper file format';
                    break;
            case 3: return 'Error: Your image is too small';
                    break;
            case 4: return 'Error: There was an error creating the images';
                    break;
         }
     }
  
}
  
?>
网友评论