Foros del Web » Programando para Internet » PHP »

Redimencionar imagen queda Distorcionada

Estas en el tema de Redimencionar imagen queda Distorcionada en el foro de PHP en Foros del Web. Pues veran he tomado uno de los aportes sacado de esta pagina: http://www.forosdelweb.com/f18/aport...as-php-569025/ el cual es este: http://www.forosdelweb.com/wiki/PHP:...as_al_servidor estoy subiendo una imagen dividia por 3 ...
  #1 (permalink)  
Antiguo 02/09/2011, 09:55
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 9 meses
Puntos: 19
Pregunta Redimencionar imagen queda Distorcionada

Pues veran he tomado uno de los aportes sacado de esta pagina:

http://www.forosdelweb.com/f18/aport...as-php-569025/

el cual es este:

http://www.forosdelweb.com/wiki/PHP:...as_al_servidor

estoy subiendo una imagen dividia por 3 (3 tamanos diferentes) ahora el problema es que la imagen queda bastante distorcionada y quisiera saber el porque, o si hay otra funcion por alli que me permita evitar esto...

el codigo que uso es el siguiente:

Código PHP:
function findexts ($filename)
        {
            
$filename strtolower($filename);
            
$exts preg_split("[/]"$filename);
            
$n count($exts)-1;
            
$exts $exts[$n];
            return 
$exts;
        }        
        
        function 
crearimagen($id,$ancho,$alto,$nombre)
        {
            require_once 
'ModifiedImage.php';
            
$image = new ModifiedImage($_FILES['pro_imgprinc']['tmp_name']);
            
$ext findexts ($_FILES['pro_imgprinc']['type']); 
            
$imagen.=$id;
            
$imagen.="_";
            
$imagen.=$nombre;
            
$imagen.=".";
            
$imagen.=$ext;
            
$ancho_original=$image->getWidth();
            
$alto_original=$image->getHeight();
            
            if (
$ancho_original>$alto)
            {
                
$image->resizeToWidth($ancho);
            }
            else if(
$ancho_original<$alto_original)
            {
                
$image->resizeToHeight($alto);
            }
            else if (
$ancho_original==$alto_original)
            {
                
$image->resizeToWidth($ancho);
            }
            
$image->save("../imagenes/productos/$nombre/$imagen");
        }
        if(!empty(
$_FILES['pro_imgprinc']) && $_FILES['pro_imgprinc']['error'] == UPLOAD_ERR_OK)
        {
            
//Creo las 3 Copias de Imagenes que Necesito:
            
crearimagen($proid,310,256,'grande');
            
crearimagen($proid,206,170,'normal');
            
crearimagen($proid,155,128,'mediana');
        } 
la variable $proid, es un numero sacado de la bd, sumado 1...

Alguien me puede orientar? gracias

EDITO: o no deberia subir varias imagenes? solo una y las otras 3 las cambio de tamano???

Última edición por JuJoGuAl; 02/09/2011 a las 10:08
  #2 (permalink)  
Antiguo 02/09/2011, 22:22
Avatar de CCB
CCB
 
Fecha de Ingreso: noviembre-2009
Ubicación: Perú
Mensajes: 65
Antigüedad: 14 años, 6 meses
Puntos: 3
Respuesta: Redimencionar imagen queda Distorcionada

Este codigo lo saque de una clase que hize para subir fotos y redimencionarla.

Esta parte es la que se encarga de hacer el thumb en 150px por lado.

Me avisas si no puedes hacerlo, te paso la class completa, no me deja postearla porque supera el numero permitido de caracteres.


Código PHP:
function Thumb(){
        
        if (
$this->listo_thumb == true){
                    
            
$this->imagen_thumb imagecreatefromjpeg($this->carpeta $this->newname);
            
            
$this->img_thumb imagecreatetruecolor(150150);
            

            
$this->new_ancho2 imagesx($this->imagen_thumb); 
            
$this->new_alto2 imagesy($this->imagen_thumb);
            
            
            
$this->ancho_thumb_max 150;
            
$this->alto_thumb_max 150;

            if(
$this->ancho_thumb_max/$this->new_ancho2 $this->alto_thumb_max/$this->new_alto2)
            {
                
$this->ancho_thumb $this->ancho_thumb_max;
                
$this->alto_thumb = ($this->new_alto2 $this->ancho_thumb) / $this->new_ancho2;
                
$this->image_x 0;
                
$this->image_y = ($this->alto_thumb_max $this->alto_thumb) / 2;
            }
            else
            {
                
$this->alto_thumb $this->alto_thumb_max;
                
$this->ancho_thumb = ($this->new_ancho2 $this->alto_thumb) / $this->new_alto2;
                
$this->image_y 0;
                
$this->image_x = ($this->ancho_thumb_max $this->ancho_thumb) / 2;
            }

                
            
imagecopyresampled($this->img_thumb$this->imagen_thumb$this->image_x$this->image_y00$this->ancho_thumb$this->alto_thumb$this->new_ancho2$this->new_alto2);
          
            
            
$this->copy_thumb imagejpeg($this->img_thumb,$this->carpeta "thumb/" $this->newname80);
   
            if (
$this->copy_thumb){
                
imagedestroy($this->img_thumb);
                
imagedestroy($this->imagen_thumb);
                
$this->message "Copiado correctamente Thumb <br />";
                echo 
$this->carpeta "thumb/" $this->newname "<br />";
            }
        
        }
    }function 
Thumb(){
        
        if (
$this->listo_thumb == true){
                    
            
$this->imagen_thumb imagecreatefromjpeg($this->carpeta $this->newname);
            
            
$this->img_thumb imagecreatetruecolor(150150);
            

            
$this->new_ancho2 imagesx($this->imagen_thumb); 
            
$this->new_alto2 imagesy($this->imagen_thumb);
            
            
            
$this->ancho_thumb_max 150;
            
$this->alto_thumb_max 150;

            if(
$this->ancho_thumb_max/$this->new_ancho2 $this->alto_thumb_max/$this->new_alto2)
            {
                
$this->ancho_thumb $this->ancho_thumb_max;
                
$this->alto_thumb = ($this->new_alto2 $this->ancho_thumb) / $this->new_ancho2;
                
$this->image_x 0;
                
$this->image_y = ($this->alto_thumb_max $this->alto_thumb) / 2;
            }
            else
            {
                
$this->alto_thumb $this->alto_thumb_max;
                
$this->ancho_thumb = ($this->new_ancho2 $this->alto_thumb) / $this->new_alto2;
                
$this->image_y 0;
                
$this->image_x = ($this->ancho_thumb_max $this->ancho_thumb) / 2;
            }

                
            
imagecopyresampled($this->img_thumb$this->imagen_thumb$this->image_x$this->image_y00$this->ancho_thumb$this->alto_thumb$this->new_ancho2$this->new_alto2);
          
            
            
$this->copy_thumb imagejpeg($this->img_thumb,$this->carpeta "thumb/" $this->newname80);
   
            if (
$this->copy_thumb){
                
imagedestroy($this->img_thumb);
                
imagedestroy($this->imagen_thumb);
                
$this->message "Copiado correctamente Thumb <br />";
                echo 
$this->carpeta "thumb/" $this->newname "<br />";
            }
        
        }
    } 
  #3 (permalink)  
Antiguo 03/09/2011, 09:05
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 9 meses
Puntos: 19
Respuesta: Redimencionar imagen queda Distorcionada

Aja pero como la uso??? me das un ejemplo por favor?
  #4 (permalink)  
Antiguo 03/09/2011, 09:12
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Redimencionar imagen queda Distorcionada

Verifica este tema a ver si te ayuda a como trabajar con lo que preguntaste http://www.forosdelweb.com/f68/aport...agenes-912637/
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 03/09/2011, 09:20
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 9 meses
Puntos: 19
Respuesta: Redimencionar imagen queda Distorcionada

Cita:
Iniciado por abimaelrc Ver Mensaje
Verifica este tema a ver si te ayuda a como trabajar con lo que preguntaste http://www.forosdelweb.com/f68/aport...agenes-912637/
jajajajaja no te ofendas pero como que no leiste mi post, esa es el aporte que uso, el que tu poteaste, entonces yo lo que hice es q a la imagen de tamano X, hice un if, si es mas alta que ancha reducia el alto y autoajustaba el ancho, de lo contrario autoajustaba el alto. y de ser iguales los ajustaba los 2 (revisa el 1er post) pero la imagen final (redimensionada) queda muy borrosa... cosa que no quiero....

  #6 (permalink)  
Antiguo 03/09/2011, 09:23
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Redimencionar imagen queda Distorcionada

Ups, me descubriste que no lei el primero jejeje, bueno ¿podrías mostrar la imagen que estás usando para poder hacer pruebas e indicarte?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 03/09/2011, 09:35
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 9 meses
Puntos: 19
Respuesta: Redimencionar imagen queda Distorcionada

Jajajajaja si con gusto, haber una pregunta ante de todo, estoy haciendo una pagina de productos, y tengo q usar 1 imagen en 3 tamanos diferentes

entonces me recomiendas crear una imagen x cada tamano o a una imagen le cambio su with / heigh...

lo digo es porq cuando toca cargar la imagen me da la impresion que la pagina carga la imagen como si midiera 100% cuando estoy usando un tamano aprox al 12%, es decir a pesar que la reduje pesa lo mismo que la original y obviamente al tratarse de varias imagenes se tarda un poco...

Imagen originnal:

http://img853.imageshack.us/img853/3473/img1b.jpg

Una de las Redimencionadas (la mas grande):

http://img718.imageshack.us/img718/1161/00020grande.jpg

Ayudame porfa, esto me tiene muy frenado, Gracias!

Última edición por JuJoGuAl; 03/09/2011 a las 10:07
  #8 (permalink)  
Antiguo 03/09/2011, 10:17
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 8 meses
Puntos: 80
Respuesta: Redimencionar imagen queda Distorcionada

Te paso la rutina que uso yo,
Resampleo de imágenes en servidor

Saludos y cualquier cosa a las ordenes
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp
  #9 (permalink)  
Antiguo 03/09/2011, 10:25
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 9 meses
Puntos: 19
Respuesta: Redimencionar imagen queda Distorcionada

Cita:
Iniciado por portalmana Ver Mensaje
Te paso la rutina que uso yo,
Resampleo de imágenes en servidor

Saludos y cualquier cosa a las ordenes
Dejame ver como funciona este y te digo. Gracias
  #10 (permalink)  
Antiguo 03/09/2011, 10:35
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 9 meses
Puntos: 19
Respuesta: Redimencionar imagen queda Distorcionada

Cita:
Iniciado por portalmana Ver Mensaje
Te paso la rutina que uso yo,
Resampleo de imágenes en servidor

Saludos y cualquier cosa a las ordenes
aja probe todas tus opciones y la imagen no queda distorcionada, ahora lo que yo quiero es que el alto y/o ancho sean calculados en proporcion a la imagen es decir yo paso 2 datos que serian el ancho / alto maximo que deseo y ps quiero que la imagen segun su tamano original sea redimencionada, que opcion debo de usar para ello???
  #11 (permalink)  
Antiguo 03/09/2011, 10:53
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 8 meses
Puntos: 80
Respuesta: Redimencionar imagen queda Distorcionada

Para que no se distorsione debes o recortarla y perder un poco de la imagen(Modo 2) o elegir que es mas importante , mantener el ancho(Modo 0) que tu deseas o el alto (Modo 1)...
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp
  #12 (permalink)  
Antiguo 03/09/2011, 10:58
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 9 meses
Puntos: 19
Respuesta: Redimencionar imagen queda Distorcionada

Cita:
Iniciado por portalmana Ver Mensaje
Para que no se distorsione debes o recortarla y perder un poco de la imagen(Modo 2) o elegir que es mas importante , mantener el ancho(Modo 0) que tu deseas o el alto (Modo 1)...
El problema es que la imagen que se esta subiendo puede ser que sea mas larga que alta. o viceversa, por eso mantener alto o ancho es algo q no deberia de usar... digo yo... yo lo que tengo es una formula de calcular ancho y alto segun sea el caso asi:

Código PHP:
if ($ancho_orig>$alto_orig)
            {
            
$ancho_dest=$anchodes;
            
$alto_dest=($ancho_dest/$ancho_orig)*$alto_orig;
            }
        else if(
$ancho_orig<$alto_orig)
            {
            
$alto_dest=$altodes;
            
$ancho_dest=($alto_dest/$alto_orig)*$ancho_orig;
            }
        else if (
$ancho_orig==$alto_orig)
        {
            
$tamano=($anchodes/$alto_orig)*$ancho_orig;
            
$alto_dest=$tamano;
            
$ancho_dest=$tamano;
        } 
Estoy haciendo bien???
  #13 (permalink)  
Antiguo 03/09/2011, 11:09
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 8 meses
Puntos: 80
Respuesta: Redimencionar imagen queda Distorcionada

Tienes unos ejemplos de como tienen que quedar tus imágenes en el servidor, según como vengan...

Es decir si son mas altas o mas anchas etc como tendrían que quedar.

Porque en definitiva a ti con el modo 0, ya te debería andar....

Tu script mantiene la relacion de aspecto de la imagen, y tu lo que quieres es que siempre quede de un mismo tamaño fijo?
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp

Última edición por portalmana; 03/09/2011 a las 11:24
  #14 (permalink)  
Antiguo 03/09/2011, 12:12
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 9 meses
Puntos: 19
Respuesta: Redimencionar imagen queda Distorcionada

Estoy tratando de crear la imagen pero obtengo errores:

me pueden ayudar???

Código PHP:
function findexts ($filename)
        {
            
$filename strtolower($filename);
            
$exts preg_split("[/]"$filename);
            
$n count($exts)-1;
            
$exts $exts[$n];
            return 
$exts;
        }
        function 
crearimagen($id,$ancho,$alto,$nombre)
        {
            
$archivo            $_FILES["pro_imgprinc"]["tmp_name"];     // Nombre y ruta del archivo subido a los temporales del servidor
            
$nombreOriginal        $_FILES["pro_imgprinc"]["name"];        // Nombre del archivo en el PC del usuario
            
$tamaioOrigen        $_FILES["pro_imgprinc"]["size"];        // Tamaño de la imagen original
            
$opcion                2;                                    // opcion para resamplear la imagen
            
$calidad            100;                                     // Calidad Final de la Imagen
            
$dir_Destino'../imagenes/productos/';
            
$dir_Destino.= $nombre;
            
$dir_Destino.= '/';            
            
            
$ext findexts ($_FILES['pro_imgprinc']['type']); 
            
$imagen.=$id;
            
$imagen.="_";
            
$imagen.=$nombre;
            
$imagen.=".";
            
$imagen.=$ext;
                
            
$nombreDestino.= $dir_Destino;
            
$nombreDestino.= $imagen;
            
            
$tamano=getimagesize$_FILES["pro_imgprinc"]["tmp_name"]);            
            
$ancho_orig=$tamano[0];
            
$alto_orig=$tamano[1];
                        
            if (
$ancho_orig>$alto_orig)
                    {
                    
$anchoDestino=$ancho;
                    
$altoDestino=($anchoDestino/$ancho_orig)*$alto_orig;
                    }
                else if(
$ancho_orig<$alto_orig)
                    {
                    
$altoDestino=$alto;
                    
$anchoDestino=($alto_dest/$alto_orig)*$ancho_orig;
                    }
                else if (
$ancho_orig==$alto_orig)
                {
                    
$tamano=($ancho/$alto_orig)*$ancho_orig;
                    
$altoDestino=$tamano;
                    
$anchoDestino=$tamano;
                }                
                            
                require_once 
'Imagen.php';
                
// Pasamos datos con los metodos set en vez de tipo JSON
                
$obj_img    = new Imagen();
                
$obj_img    ->set("imagenOrigen"    str_replace("\\","/",$archivo));        // Usamos el str_replace para mayor compatibilidad con distintos servidores
                
$obj_img    ->set("imagenDestino"    $nombreDestino);
                
$obj_img    ->set("anchoDestino"    $anchoDestino);
                
$obj_img    ->set("altoDestino"        $altoDestino);
                
$obj_img    ->set("recorte"            , array('filas'    => 3'columnas'    => 3'centrado'    =>    4));
                
$obj_img    ->set("calidadImagen"    $calidad);
                
$obj_img    ->set("generarArchivo"    true);     // true genera un archivo en el servidor False la envia para descargar en este caso no se puede enviar nada al servidor).
                
$obj_img    ->set("modo"            $opcion);
                
$obj_img    ->set('archivoTmp'        true);    // Si vamos a editarlo directamente de los temporales debemos indicarle que es temporal
                
$obj_img    ->set('borrarOrigen'    true);     // Se utiliza para borrar la imagen original del servidor. Si lo hacemos desde el temporal se puede dejar sin establecer.
                
$obj_img    ->procesarImagen();    
        }
        
        if(!empty(
$_FILES['pro_imgprinc']) && $_FILES['pro_imgprinc']['error'] == UPLOAD_ERR_OK)
        {
            
//Creo las 3 Copias de Imagenes que Necesito:
            
crearimagen($proid,310,256,'grande');
            
crearimagen($proid,206,170,'normal');
            
crearimagen($proid,155,128,'mediana');
        } 
el Error es:

Warning: getimagesize(C:\Windows\Temp\phpEE31.tmp) [function.getimagesize]: failed to open stream: No such file or directory in C:\AppServ\www\adm\panel_admin_productos_nuevo.php on line 64

y segun leo en este foro el GETSIZE lo estoy haciendo bien... entonces que pasa :S
  #15 (permalink)  
Antiguo 03/09/2011, 12:51
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 8 meses
Puntos: 80
Respuesta: Redimencionar imagen queda Distorcionada

Tiene pinta a permisos, como que no puede leer... No se si el php pueda acceder a C:\Windows\Temp\ , quizas deberias configurar un directorio temporario bajo tu localhost...

Pero no estoy seguro...
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp
  #16 (permalink)  
Antiguo 04/09/2011, 13:20
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 9 meses
Puntos: 19
Respuesta: Redimencionar imagen queda Distorcionada

Como hago eso??? lo estoy corriendo en windows 7 x64
  #17 (permalink)  
Antiguo 05/09/2011, 07:52
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 9 meses
Puntos: 19
Respuesta: Redimencionar imagen queda Distorcionada

Bueno el Problema lo resolvi, la funcion que estaba usando tenia una opcion que borraba la iamgen del temporal, al colocar false a esa opcion me la procesaba...

Ahora una pregunta a nivel inforamtivo yo manejo productos en mi pagina por lo tanto manejos sus fotos, ahora bien yo uso generalmente 3 tamanos de una misma imagen y lo que hice fue crear una copia de dicha imagen 3 veces una por cada tamano a usar.

Que es mas recomendable? dejar las 3 imagenes? o crear una sola con el tamano maximo que uso, y las otras 2 solo lo que hago es cambiar el W y H ???? Que consejos me pueden dar al respecto????

Etiquetas: imagenes, queda, redimencionar, variables
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 00:52.