Ver Mensaje Individual
  #4 (permalink)  
Antiguo 15/12/2008, 10:04
Avatar de Snd234
Snd234
 
Fecha de Ingreso: mayo-2007
Ubicación: Frente al PC
Mensajes: 413
Antigüedad: 17 años, 6 meses
Puntos: 2
Respuesta: Redimensionar imagen + upload php

Aquí te dejo una clase que desarrolle para el mismo propósito que necesitas, espero te sirva:

Código PHP:
<?php

    
/**
     * Thumbnail
     * 
     * Crea una miniatura de una imagen y la guarda en un formato especifico
     * 
     * @package 
     * @author Snd234
     * @copyright 2008
     * @version 1.0
     * @access public
     */
    
class Thumbnail {
        
// informacion de la miniatura
        
private $thumbnail;
        private 
$thumbnail_width;
        private 
$thumbnail_height;
        
        
// informacion de la imagen original
        
private $image;
        private 
$image_width;
        private 
$image_height;
        private 
$image_type;
        
        public 
$error;
        
        
/**
         * Thumbnail::__construct()
         * 
         * @param mixed $source
         * @return
         */
        
public function __construct($source) {
            
$image_info getimagesize($source);
            
            if(
$image_info) {
                
$this->image_width $image_info[0];
                
$this->image_height $image_info[1];
                
$this->image_type $image_info[2];
                
                switch(
$this->image_type) {
                    case 
IMAGETYPE_JPEG: {
                        
$this->image imagecreatefromjpeg($source);
                        break;
                    }
                    
                    case 
IMAGETYPE_GIF: {
                        
$this->image imagecreatefromgif($source);
                        break;
                    }
                    
                    case 
IMAGETYPE_PNG: {
                        
$this->image imagecreatefrompng($source);
                        break;
                    }
                    
                    default: {
                        
$this->error "Formato no soportado";
                        break;
                    }
                }
            } 
            else {
                
$this->error "Formato invalido";
            }
        }
        
        
/**
         * Thumbnail::resize()
         * 
         * @param mixed $width
         * @param integer $height
         * @return void
         */
        
public function resize($width$height 0) {
            
$this->thumbnail_width $width;
            
            if(
$height == 0) {
                
$this->thumbnail_height $width;
            } else {
                
$this->thumbnail_height $height;
            }
            
            
$this->thumbnail imagecreatetruecolor($this->thumbnail_width$this->thumbnail_height);
            
            
imagecopyresampled(
                
$this->thumbnail$this->image0000,
                
$this->thumbnail_width$this->thumbnail_height,
                
$this->image_width$this->image_height
            
);
        }
        
        
/**
         * Thumbnail::save_jpg()
         * 
         * @param mixed $dir
         * @param mixed $name
         * @param integer $quality
         * @return
         */
        
public function save_jpg($dir$name$quality 95) {
            
$path $dir $name image_type_to_extension(IMAGETYPE_JPEG);
            
imagejpeg($this->thumbnail$path$quality);
            
            
imagedestroy($this->thumbnail);
        }
        
        
/**
         * Thumbnail::save_gif()
         * 
         * @param mixed $dir
         * @param mixed $name
         * @return
         */
        
public function save_gif($dir$name) {
            
$path $dir $name image_type_to_extension(IMAGETYPE_GIF);
            
imagegif($this->thumbnail$path);
            
            
imagedestroy($this->thumbnail);
        }
        
        
/**
         * Thumbnail::save_png()
         * 
         * @param mixed $dir
         * @param mixed $name
         * @return
         */
        
public function save_png($dir$name) {
            
$path $dir $name image_type_to_extension(IMAGETYPE_PNG);
            
imagegif($this->thumbnail$path);
            
            
imagedestroy($this->thumbnail);
        }
    }
    
?>
Y su funcionamiento es el siguiente:

Código PHP:
<?php

    
include("Thumbnail.class.php");

    if(isset(
$_FILES["imagen"])) {
        
$temp $_FILES["imagen"]["tmp_name"];
    
        
$thumb = new Thumbnail($temp);
        if(
$thumb->error) {
            echo 
$thumb->error;
        } else {
            
$thumb->resize(80);
            
$thumb->save_jpg("""imagen");
        }
    }

?>

<form action="" method="post" enctype="multipart/form-data">
    <input type="file" name="imagen" />
    <input type="submit" value="Enviar" />
</form>
El formulario tiene un campo file llamado imagen, entonces cuando se envía, se evalúa si el campo enviado existe, si es así, se obtiene el nombre temporal con el que esta guardado. Luego se crea la instancia de la clase Thumbnail y se le pasa como parametro la ruta del archivo subido. Si ocurrio algun error, como que el archivo no fuera una imagen, entonces mostrara el error, sino, entonces redimensionara la imagen en las dimensioens especificadas y luego podras guardar la nueva imagen en algun formato especifico, en este caso se guardara como una imagen JPEG en el mismo directorio del script actual con el nombre imagen, la extension la asignara automaticamente dependiendo del formato en que se quiera guardar.
__________________
KIBIT.cl