这个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; } } } ?>