一個完整的圖片上傳php類

jphp 9年前發布 | 1K 次閱讀 PHP

這個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;
     }
 }

}

?></pre>

 本文由用戶 jphp 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!