Foros del Web » Programando para Internet » PHP »

Redimensionar imagen + upload php

Estas en el tema de Redimensionar imagen + upload php en el foro de PHP en Foros del Web. Hola gente, estube buscando mucho sobre esto pero encontre cosas por separado y luego de pruebas y errores no llegue al resultado deseado. Bueno lo ...
  #1 (permalink)  
Antiguo 15/12/2008, 09:15
Avatar de elias77  
Fecha de Ingreso: noviembre-2005
Ubicación: Buscame...
Mensajes: 1.051
Antigüedad: 18 años, 5 meses
Puntos: 11
Redimensionar imagen + upload php

Hola gente, estube buscando mucho sobre esto pero encontre cosas por separado y luego de pruebas y errores no llegue al resultado deseado.
Bueno lo que necesito es poder subir una imagen al servidor con php y que al subir la imagen se redimencione y cambie al nombre y al tamaño que yo establezca por defecto. No se si es mucho pedir, pero busque y busque y no encontre nada que resuelva justamente esto. Espero que me puedan ayudar.
__________________
You're face to face, with the man who sold the world - NIRVANA
Diese stadt ist eine Dirne, hat rote flecken auf der Stirn - RAMMSTEIN
  #2 (permalink)  
Antiguo 15/12/2008, 09:19
Avatar de masterojitos  
Fecha de Ingreso: julio-2008
Ubicación: Lima Callao Chucuito
Mensajes: 1.931
Antigüedad: 15 años, 9 meses
Puntos: 105
Respuesta: Redimensionar imagen + upload php

puedes hacerlo con la librerias GD.

mira este post: Click MasterOjitos
__________________
Atte. MasterOjitos :ojotes:
Todo sobre Programación Web
Las ultimas tendencias en Efectos y Recursos Web: MasterOjitos Blog
  #3 (permalink)  
Antiguo 15/12/2008, 09:40
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Redimensionar imagen + upload php

Tema trasladado a PHP General.
  #4 (permalink)  
Antiguo 15/12/2008, 10:04
Avatar de Snd234  
Fecha de Ingreso: mayo-2007
Ubicación: Frente al PC
Mensajes: 413
Antigüedad: 17 años
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
  #5 (permalink)  
Antiguo 15/12/2008, 17:56
Avatar de elias77  
Fecha de Ingreso: noviembre-2005
Ubicación: Buscame...
Mensajes: 1.051
Antigüedad: 18 años, 5 meses
Puntos: 11
Respuesta: Redimensionar imagen + upload php

Hola Snd234 estube probando tu ejemplo y al subir la imagen me tira el siguiente error:


Cita:
Fatal error: Call to undefined function image_type_to_extension() in (ruta_del_servidor)\Thumbnail.class.php on line 103
Por lo visto es un poblema con la extencion del archivo, la linea 103 es:

Cita:
$path = $dir . $name . image_type_to_extension(IMAGETYPE_JPEG);
Pero no logro entender cual es, espero que me puedas ayudar
__________________
You're face to face, with the man who sold the world - NIRVANA
Diese stadt ist eine Dirne, hat rote flecken auf der Stirn - RAMMSTEIN
  #6 (permalink)  
Antiguo 15/12/2008, 19:13
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 18 años, 1 mes
Puntos: 33
Respuesta: Redimensionar imagen + upload php

elias77:
Te recomendo que el trabajo de subir la imagen la separes del trabajo de redimensionar o te estara dando errores (No siempre).
Primero subes la imagen al servidor y en una segunda accion la redimensionas.
Saludos
Y espero te ayude
Franco
  #7 (permalink)  
Antiguo 15/12/2008, 19:40
Avatar de elias77  
Fecha de Ingreso: noviembre-2005
Ubicación: Buscame...
Mensajes: 1.051
Antigüedad: 18 años, 5 meses
Puntos: 11
Respuesta: Redimensionar imagen + upload php

Hola, reeplaze la linea 103 por esta linea, la imagen asi como esta ahora la sube correctamente

Cita:
$path = $dir . $name . '.jpeg';
__________________
You're face to face, with the man who sold the world - NIRVANA
Diese stadt ist eine Dirne, hat rote flecken auf der Stirn - RAMMSTEIN
  #8 (permalink)  
Antiguo 15/12/2008, 19:42
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Redimensionar imagen + upload php

Te marcaba error porque llamabas a una funcion no definida. Al parecer se te estaba olvidando incluir el archivo que contiene la clase.
  #9 (permalink)  
Antiguo 16/12/2008, 09:28
Avatar de elias77  
Fecha de Ingreso: noviembre-2005
Ubicación: Buscame...
Mensajes: 1.051
Antigüedad: 18 años, 5 meses
Puntos: 11
Respuesta: Redimensionar imagen + upload php

Como puedo cambiar los parametros del tamaño de la imagen en miniatura?
__________________
You're face to face, with the man who sold the world - NIRVANA
Diese stadt ist eine Dirne, hat rote flecken auf der Stirn - RAMMSTEIN
  #10 (permalink)  
Antiguo 16/12/2008, 09:44
Avatar de elias77  
Fecha de Ingreso: noviembre-2005
Ubicación: Buscame...
Mensajes: 1.051
Antigüedad: 18 años, 5 meses
Puntos: 11
Respuesta: Redimensionar imagen + upload php

Listo, ya solucione el problema
__________________
You're face to face, with the man who sold the world - NIRVANA
Diese stadt ist eine Dirne, hat rote flecken auf der Stirn - RAMMSTEIN
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:53.