Foros del Web » Programando para Internet » PHP »

¿Es posible comprimir las imagenes al vuelo?

Estas en el tema de ¿Es posible comprimir las imagenes al vuelo? en el foro de PHP en Foros del Web. Necesito saber si se puede comprimir las imágenes al vuelo, pero manteniendo su relacion de aspecto, no se si me entienden. Por ejemplo las gif ...
  #1 (permalink)  
Antiguo 08/12/2009, 05:37
 
Fecha de Ingreso: enero-2008
Mensajes: 381
Antigüedad: 12 años, 4 meses
Puntos: 19
¿Es posible comprimir las imagenes al vuelo?

Necesito saber si se puede comprimir las imágenes al vuelo, pero manteniendo su relacion de aspecto, no se si me entienden.

Por ejemplo las gif adaptables son las que menos ocupan y si despues tambien se pierde un poco de calidad no importa, lo que importa es conseguir bajar el tamaño de la imagen.

Asi que haria falta convertir a gif adaptable (creo que es el que menos ocupa, si alguien sabe otro que me lo diga por favor) y entonces bajar la calidad si todavia sigue ocupando demasiado.

Saludos
  #2 (permalink)  
Antiguo 08/12/2009, 05:44
 
Fecha de Ingreso: enero-2008
Mensajes: 381
Antigüedad: 12 años, 4 meses
Puntos: 19
Respuesta: ¿Es posible comprimir las imagenes al vuelo?

Una cosa que no he dicho, también quiero mantener los pixeles originales. Es decir, que si era una imagen 400x200 mantener esa resolución en lugar de bajar a 200x100.

Bueno, algo si se podría bajar para ayudar, como a 300x150 pero que no sea bajar el peso a base de redimiensionar, sino que también se comprima y/o se cambie de formato.
  #3 (permalink)  
Antiguo 08/12/2009, 09:00
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 10 años, 6 meses
Puntos: 65
Respuesta: ¿Es posible comprimir las imagenes al vuelo?

Lo que queres es escalarlas... Sabes manejar objetos? te paso una clase que tengo creada yo para eso...
  #4 (permalink)  
Antiguo 08/12/2009, 09:08
Avatar de masterojitos  
Fecha de Ingreso: julio-2008
Ubicación: Lima Callao Chucuito
Mensajes: 1.931
Antigüedad: 11 años, 10 meses
Puntos: 105
Respuesta: ¿Es posible comprimir las imagenes al vuelo?

lo que necesitas es esto:

http://www.programacionweb.net/artic...iculo/?num=312
__________________
Atte. MasterOjitos :ojotes:
Todo sobre Programación Web
Las ultimas tendencias en Efectos y Recursos Web: MasterOjitos Blog
  #5 (permalink)  
Antiguo 08/12/2009, 10:50
 
Fecha de Ingreso: enero-2008
Mensajes: 381
Antigüedad: 12 años, 4 meses
Puntos: 19
Respuesta: ¿Es posible comprimir las imagenes al vuelo?

Cita:
Iniciado por jackson666 Ver Mensaje
Lo que queres es escalarlas... Sabes manejar objetos? te paso una clase que tengo creada yo para eso...
Si por favor.

Eso es simplemente bajar las dimensiones... ya comente en la segunda respuesta que lo que quiero es que ocupe menos manteniendo los pixeles.
  #6 (permalink)  
Antiguo 08/12/2009, 10:56
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 10 años, 6 meses
Puntos: 65
Respuesta: ¿Es posible comprimir las imagenes al vuelo?

Toda tuya
Código PHP:
<?php

#################################### clase crear imagenes #######################################
class createImg{
    var 
$imagen;//nombre de la imagen cargada
    
var $ext;//extension nueva imagen cargada
    
    
var $ancho;//ancho de nueva imagen (metodo escala)
    
var $alto;//alto de nueva imagen (metodo escala)
    
    
function __construct($ruta){
        if(
file_exists($ruta)){
        
$this->imagen=$ruta;
    }else{
        echo 
"Ruta de Imagen Incorrecta";
    }
    }
    
    function 
resizeImg($newName,$width,$height){
        
        
$tamanio=getimagesize($this->imagen);
        
$this->ancho=$tamanio[0];
        
$this->alto=$tamanio[1];
                    
        
$imagenRedim=imagecreatetruecolor($width,$height);      
       
        list(
$nombre,$extension)=explode(".",$this->imagen);
        
$this->ext=$extension;
        
        if(empty(
$newName)){
            
$newName=$nombre;
        }        
        
        echo 
"<br /><b>Nombre de la Imagen Original:</b> ".$this->imagen."<br /><br />";
        echo 
"<b>Nombre de la Imagen Transformada:</b> ".$newName.".".$this->ext."<br /><br />";
        
        echo 
"<u>Tamaño de la Imagen Original:</u><br />Ancho--> ".$tamano[0]."<br />Alto---> ".$tamano[1]."<br /><br />";
        echo 
"<u>Tamaño de la Imagen Transformada:</u><br />Ancho--> ".$width."<br />Alto---> ".$height."<br /><br />";
       
        if(
strtolower($this->ext)=="jpg" or strtolower($this->ext)=="jpeg"){
            
$crear=imagecreatefromjpeg($this->imagen);
            
imagecopyresampled($imagenRedim,$crear,0,0,0,0,$width,$height,$this->ancho,$this->alto);
            
imagejpeg($imagenRedim,$newName.".jpg",100);
            echo 
"Formato---> jpg<br />";
            
imagedestroy($crear);
       
        }else if(
strtolower($this->ext)=="png"){
            echo 
"Formato---> png<br />";
            
$crear=imagecreatefrompng($this->imagen);
            
imagecopyresampled($imagenRedim,$crear,0,0,0,0,$width,$height,$this->ancho,$this->alto);
            
imagepng($imagenRedim,$newName.".png");
            
imagedestroy($crear);
                
        }else if(
strtolower($this->ext)=="gif"){
            echo 
"Formato---> gif<br />";
            
$crear=imagecreatefromgif($this->imagen);
            
imagecopyresampled($imagenRedim,$crear,0,0,0,0,$width,$height,$this->ancho,$this->alto);
            
imagegif($imagenRedim,$newName.".gif");
            
imagedestroy($crear);
        
        }else{
            echo 
"<b><font color='red'>El nombre o extension de la imagen es Incorrecto</font></b>";
        }
       
    }
//----------------------------------> fin metodo de redimension
    
   
   
    
function scaleImg($newName,$percent){
        
        
#Esta funcion mantiene la relacion de aspecto o sea, da un multiplo del area de la imagen original
        
       #echo "<br /><b>Nombre de Imagen:</b> ".$this->imagen."<br />";
        
        
$tamanio=getimagesize($this->imagen);
        
$this->ancho=$tamanio[0];
        
$this->alto=$tamanio[1];
        
        
#Redimension
        
$finalWidth=$this->ancho*$percent;
        
$finalHeight=$this->alto*$percent;
        
        
$imgEscalada=imagecreatetruecolor($finalWidth,$finalHeight);
               
        list(
$noSirve,$sirve)=explode(".",$this->imagen);
        
$this->ext=$sirve;        
       
        if(
strtolower($this->ext)=="jpg" or strtolower($this->ext)=="jpeg"){
            
#echo "Formato---> jpg<br />";
            
$crear=imagecreatefromjpeg($this->imagen);
            
imagecopyresampled($imgEscalada,$crear,0,0,0,0,$finalWidth,$finalHeight,$this->ancho,$this->alto);
            
imagejpeg($imgEscalada,$newName.".jpg",100);
                  
        }else if(
strtolower($this->ext)=="png"){
            
#echo "Formato---> png<br />";
            
$crear=imagecreatefrompng($this->imagen);
            
imagecopyresampled($imgEscalada,$crear,0,0,0,0,$finalWidth,$finalHeight,$this->ancho,$this->alto);
            
imagepng($imgEscalada,$newName.".png");
       
        }else if(
strtolower($this->ext)=="gif"){
            
#echo "Formato---> gif<br />";
            
$crear=imagecreatefromgif($this->imagen);
            
imagecopyresampled($imgEscalada,$crear,0,0,0,0,$finalWidth,$finalHeight,$this->ancho,$this->alto);
            
imagegif($imgEscalada,$newName.".gif");
        }
        
    }
//-----------------------> fin metodo scaleImg
    
    
function __destruct(){
        echo 
"<br /><b>Fin de Transformaciones</b><br />";        
    }
}
//###########################################################################> fin class crearImg
?>
Te deje los 2 metodos el de redimension y el de escala...

Y aca va un ejempo de uso:

Código PHP:

<?php
#__classes.php es el archivo de arriba
include("__classes.php");
$imagen=new createImg("[ruta de la imagen con extension y todo]");
$imagen->scaleImg("[nuevo nombre de la imagen]",[factor de escala]);
?>
PD: gracias por el karma =P

Última edición por jackson666; 08/12/2009 a las 11:04
  #7 (permalink)  
Antiguo 08/12/2009, 11:25
Avatar de masterojitos  
Fecha de Ingreso: julio-2008
Ubicación: Lima Callao Chucuito
Mensajes: 1.931
Antigüedad: 11 años, 10 meses
Puntos: 105
Respuesta: ¿Es posible comprimir las imagenes al vuelo?

pero tu script no baja el peso de la imagen que creo que es lo que el usuario quiere......
seria excelente si conservara su tamaña original pero le baje el peso por la carga en web.
__________________
Atte. MasterOjitos :ojotes:
Todo sobre Programación Web
Las ultimas tendencias en Efectos y Recursos Web: MasterOjitos Blog
  #8 (permalink)  
Antiguo 08/12/2009, 11:45
 
Fecha de Ingreso: enero-2008
Mensajes: 381
Antigüedad: 12 años, 4 meses
Puntos: 19
Respuesta: ¿Es posible comprimir las imagenes al vuelo?

Ya he conseguido bajar a cuatro veces menos de peso una imagen al vuelo convirtiendola a gif al vuelo, pero perde mucha calidad...

Lo suyo seria poder indicarle un maximo y que se guarde la imagen en funcion de ese maximo (me hace falta convertir la imagen al vuelo para que no pase de un maximo)

Saludos
  #9 (permalink)  
Antiguo 21/12/2009, 12:00
 
Fecha de Ingreso: enero-2008
Mensajes: 381
Antigüedad: 12 años, 4 meses
Puntos: 19
Respuesta: ¿Es posible comprimir las imagenes al vuelo?

Ya he conseguido lo que queria.

El truco estaba en usar "imagetruecolortopalette", asi crea una image con paleta de colores adaptable, y despues se puede guardar con paleta en gif y png, en jpeg no (pero de todas maneras este formato si se puede bajar bastante de formato comprimiendo, pero no admite transparencias).

Lo malo es que los png adaptables no admiten capas alpha y al convertirlo se queda raro, pero lo he solucionando creando una nueva truecolor (imagecreatetruecolor), despues llenandola de un color raro poco comun (imagefill), despues hacer ese color transparente (imagecolortransparent) y por ultimo pegar la imagen anterior en la nueva imagen con imagecopyresample y una vez hecho todo eso ya no quedan capas alpha por lo que se puede hacer un simple "imagetruecolortopalette".

La calidad si que se baja un poco, pero no queda demasiado mal.


Saludos.
  #10 (permalink)  
Antiguo 21/12/2009, 14:03
Avatar de masterojitos  
Fecha de Ingreso: julio-2008
Ubicación: Lima Callao Chucuito
Mensajes: 1.931
Antigüedad: 11 años, 10 meses
Puntos: 105
Respuesta: ¿Es posible comprimir las imagenes al vuelo?

como que seria genial que postiaras tu codigo como una libreria, asi sea util para quienes lo necesiten.

Suerte y gracias de antemano.
__________________
Atte. MasterOjitos :ojotes:
Todo sobre Programación Web
Las ultimas tendencias en Efectos y Recursos Web: MasterOjitos Blog
  #11 (permalink)  
Antiguo 22/12/2009, 08:33
 
Fecha de Ingreso: enero-2008
Mensajes: 381
Antigüedad: 12 años, 4 meses
Puntos: 19
Respuesta: ¿Es posible comprimir las imagenes al vuelo?

Por ahora lo tengo muy cutre, hecho en funciones pero pienso hacer una libreria, en cuanto la haga lo pongo aqui ;) pero basicamente es lo que he explicado arriba.

Saludos.
  #12 (permalink)  
Antiguo 17/03/2010, 22:04
 
Fecha de Ingreso: noviembre-2007
Mensajes: 118
Antigüedad: 12 años, 6 meses
Puntos: 0
Respuesta: ¿Es posible comprimir las imagenes al vuelo?

Cita:
Iniciado por El-FeNiX Ver Mensaje
Por ahora lo tengo muy cutre, hecho en funciones pero pienso hacer una libreria, en cuanto la haga lo pongo aqui ;) pero basicamente es lo que he explicado arriba.

Saludos.
Has solucionado esto? a mi tambien me interesaria reducir el peso de una imagen pero sin redimensionarla o escalarla si es posible
  #13 (permalink)  
Antiguo 18/03/2010, 14:55
 
Fecha de Ingreso: enero-2008
Mensajes: 381
Antigüedad: 12 años, 4 meses
Puntos: 19
Respuesta: ¿Es posible comprimir las imagenes al vuelo?

En realidad lo deje porque me di cuenta que convertir al vuelo no es la solución. Primero porque la libreria GD no esta muy especializada en crear imagenes con paleta adaptable, y se obtienen resultado mucho mejores con programas como photoshop. Ademas no es buena idea convertirlas al vuelo en cada peticion, la libreria GD gasta muchisima ram y cpu y afectaria enormemente al rendimiento.

De todas maneras si quieres reducir el peso de una imagen hay muchas otras utilidades online si no tiene Photoshop o Fireworks, buscando en google se encuentran bastantes: http://www.google.es/search?q=compress+image+online

Saludos.
  #14 (permalink)  
Antiguo 18/03/2010, 15:00
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 12 años, 1 mes
Puntos: 2534
Respuesta: ¿Es posible comprimir las imagenes al vuelo?

Cita:
Iniciado por El-FeNiX Ver Mensaje
En realidad lo deje porque me di cuenta que convertir al vuelo no es la solución. Primero porque la libreria GD no esta muy especializada en crear imagenes con paleta adaptable, y se obtienen resultado mucho mejores con programas como photoshop. Ademas no es buena idea convertirlas al vuelo en cada peticion, la libreria GD gasta muchisima ram y cpu y afectaria enormemente al rendimiento.

De todas maneras si quieres reducir el peso de una imagen hay muchas otras utilidades online si no tiene Photoshop o Fireworks, buscando en google se encuentran bastantes: http://www.google.es/search?q=compress+image+online

Saludos.
pues aún así no entendí el problema... se supone que para el formato de las imágenes ya están comprimidas... osea, ese es su formato final...

¿para que comprimir mas las imágenes?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #15 (permalink)  
Antiguo 19/03/2010, 16:55
 
Fecha de Ingreso: enero-2008
Mensajes: 381
Antigüedad: 12 años, 4 meses
Puntos: 19
Respuesta: ¿Es posible comprimir las imagenes al vuelo?

Para que ocupen menos, pero realmente es verdad que no merece demasiado la pena... lo que pasa es que no lo estaba haciendo bien desde al principio.
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 09:10.