Foros del Web » Programando para Internet » PHP »

Imagenes en base de datos

Estas en el tema de Imagenes en base de datos en el foro de PHP en Foros del Web. Hola foreros, tengo un problema con unas imagenes que levanto de una tabla... Tengo este código que al principio andaba de perlas. Código PHP: <?  ...
  #1 (permalink)  
Antiguo 10/02/2009, 14:07
 
Fecha de Ingreso: febrero-2004
Mensajes: 134
Antigüedad: 20 años, 2 meses
Puntos: 0
Imagenes en base de datos

Hola foreros, tengo un problema con unas imagenes que levanto de una tabla...
Tengo este código que al principio andaba de perlas.

Código PHP:
<? 
$imagen 
$reg['imagen'];
if(
$imagen=="productos/"){
echo 
"<img src=\"img/imagen_no_dis.jpg\">"
}else{    
echo  
"<img src='".$reg['imagen']."' onload='if(this.height > 134) {this.height=134}'>"; }
?>
Pero, oh sorpresa!!! con el correr de los días no se si es porque tiene demasiadas imágenes para levantar pero a veces me muestra las fotos de tamaño original y cuando refresco (F5) me las redimensiona.
Existe la posibilidád de evitar esto o siempre es necesario el refresco manual ?
Desde ya muchas gracias por todo.
Claugtrs
  #2 (permalink)  
Antiguo 10/02/2009, 14:09
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Imagenes en base de datos

sucede por que estas "re dimensionando" con Javascript!!!

osea... no es lo mejor, y por ende ¿que pasaría si desactivas el Javascript de tu navegador???

pues estas re dimensiones se pierden, y veras todas en original.... piensalo un poco, por favor!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 10/02/2009, 14:34
 
Fecha de Ingreso: febrero-2004
Mensajes: 134
Antigüedad: 20 años, 2 meses
Puntos: 0
Respuesta: Imagenes en base de datos

Estuve intentando con librerías gd pero no logro entenderlo.
Existe la posibilidad de hacerlo de otra manera?
  #4 (permalink)  
Antiguo 10/02/2009, 14:36
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Imagenes en base de datos

si, pero todas las maneras te exigen programar...

demás, si no puedes con GD dudo que lo logres con algo mas... ¿porque no usar una clase diseñada ya??

revisa PHPImagen o phpThumb
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 10/02/2009, 14:37
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: Imagenes en base de datos

No, a menos que subas la imagen ya redimensionada, tu única solución es hacerlo vía la libería GD.

Saludos
  #6 (permalink)  
Antiguo 10/02/2009, 14:53
 
Fecha de Ingreso: octubre-2008
Ubicación: Santiago de Surco - Lima - Peru
Mensajes: 39
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Imagenes en base de datos

Hay formas de redimensionarlas con clases, busca bien en san google, sino hay clases ya diseñadas en algunos carros de compras, no t esstoy diciendo que crakees sino investiga como elaborar eso
  #7 (permalink)  
Antiguo 10/02/2009, 14:57
Avatar de ElJavista
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: Lima Perú
Mensajes: 2.231
Antigüedad: 17 años, 1 mes
Puntos: 67
Respuesta: Imagenes en base de datos

Te voy a ayudar, te voy a regalar una clase hecha por mi, que usa las funciones GD para redimensionar las imágenes. Es muy fácil de usar y permite redimensionar las imágenes de 3 formas: la primera reduce proporcionalmente el tamaño. La segunda lo limita en una ancho y alto máximo, la tercera lo corta abarcando el área máxima. También se puede usar para redimensionar la imagen sin crear otra, o sea, usando la etiqueta <img. Bueno, mañana posiblemente la publicaré.
  #8 (permalink)  
Antiguo 10/02/2009, 15:12
 
Fecha de Ingreso: febrero-2004
Mensajes: 134
Antigüedad: 20 años, 2 meses
Puntos: 0
Estuve probando esto y nada...


redimensiono.php
Código PHP:
<?
$anchura
=180;
$hmax=180;
$nombre=basename($_GET['imagen']);
$datos getimagesize($nombre);
if(
$datos[2]==1){$img = @imagecreatefromgif($nombre);}
if(
$datos[2]==2){$img = @imagecreatefromjpeg($nombre);}
if(
$datos[2]==3){$img = @imagecreatefrompng($nombre);}
$ratio = ($datos[0] / $anchura);
$altura = ($datos[1] / $ratio);
if(
$altura>$hmax){$anchura2=$hmax*$anchura/$altura;$altura=$hmax;$anchura=$anchura2;}
$thumb imagecreatetruecolor($anchura,$altura);
imagecopyresampled($thumb$img0000$anchura$altura$datos[0], $datos[1]);
if(
$datos[2]==1){header("Content-type: image/gif"); imagegif($thumb);}
if(
$datos[2]==2){header("Content-type: image/jpeg");imagejpeg($thumb);}
if(
$datos[2]==3){header("Content-type: image/png");imagepng($thumb); }
imagedestroy($thumb);
?>
y para ver la imagen

Código PHP:
<?
$imagen 
$reg['imagen'];
if(
$imagen=="productos/"){
echo 
"<img src=\"img/imagen_no_dis.jpg\">"
}else{

echo 
"<img src='redimensiono.php?imagen= $imagen'> ";}

?>
me parece que el error esta en el path...seguiré investigando
Gracias por las respuesta!!!

Ah!! Ok ElJavista la esperaré con ansias!!

Última edición por GatorV; 10/02/2009 a las 15:49
  #9 (permalink)  
Antiguo 10/02/2009, 15:24
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Imagenes en base de datos

si, el error esta en el nombre...

Código PHP:
$nombre=basename($_GET['imagen']);

// MAL
imagecreatefromgif($nombre);

// BIEN !!!!
imagecreatefromgif($_GET['imagen']); // pero obvio, debe ser real!!! 
ya que basename() quita la ruta completa... y así no sirve

demás, no calles los errores con @ por eso no te das cuenta!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 10/02/2009, 15:50
 
Fecha de Ingreso: febrero-2004
Mensajes: 134
Antigüedad: 20 años, 2 meses
Puntos: 0
Respuesta: Imagenes en base de datos

En la imagen me sale el cuadradito como que no hay imagen y las propiedades me da:

redimensionar.php?imagen=%20productos/mifoto.jpg
  #11 (permalink)  
Antiguo 10/02/2009, 15:56
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Imagenes en base de datos

el %20 es un espacio ... ¿de verdad esta bien eso???

intenta cargar esa URL manualmente en el navegador ¿que sale??
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #12 (permalink)  
Antiguo 10/02/2009, 16:28
 
Fecha de Ingreso: febrero-2004
Mensajes: 134
Antigüedad: 20 años, 2 meses
Puntos: 0
Gracias lo probaré

Lo que no logro descubrir es porque en el codigo fuente me sale en la imagen que no se ve...
Código:
<img src='redimensionar.php?imagen= productos/mi_imagen.jpg'>
en vez de

Código:
<img src='productos/mi_imagen.jpg'>
que calculo debería mostrarse asi, no?

Última edición por GatorV; 12/02/2009 a las 15:46
  #13 (permalink)  
Antiguo 12/02/2009, 11:47
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: Imagenes en base de datos

Pues por lo que veo el problema puede ser ese espacio enfrente de productos/mi_imagen, para que te funcione el codigo que tienes tienes que pasarle el path correcto a la imagen.

Saludos
  #14 (permalink)  
Antiguo 12/02/2009, 14:02
Avatar de ElJavista
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: Lima Perú
Mensajes: 2.231
Antigüedad: 17 años, 1 mes
Puntos: 67
Respuesta: Imagenes en base de datos

Bueno, no sé si ya te servirá porque te han ayudado otros, pero de todos modos si no es a ti a alguien le podría servir:

Código PHP:
<?php
  
class Imagen {
        private 
$exist false;
        private 
$width 0;
        private 
$height 0;
        private 
$source null;
        private 
$thumb null;

        function 
Imagen($img) {
                 if (
file_exists($img)) {
                    list(
$wi$he$tip) = getimagesize($img);
                    
$this->width $wi;
                    
$this->height $he;

                    if (
$tip == 1$this->source imagecreatefromgif($img);
                    elseif (
$tip == 2$this->source imagecreatefromjpeg($img);
                    elseif (
$tip == 3$this->source imagecreatefrompng($img);
                    
$this->exist true;
                 }
        }

        private function 
createThumb($w$h) {
                
$this->thumb imagecreatetruecolor($w$h);
        }

        function 
makeThumb($ruta$w$h$opc false) {
                 if (
$this->exist) {
                    
$wi $this->width;
                    
$he $this->height;

                    if (
$w) {
                       
$wp $w;
                       
$hp round(($he $wi) * $wp);
                    }  elseif (
$h) {
                       
$hp $h;
                       
$wp round(($wi $he) * $hp);
                    }

                    
$this->createThumb($wp$hp);
                    
$this->reDim(0000$wp$hp$wi$he);

                    if (
$opc) return $this->thumb;
                    else return 
$this->setImg($ruta);
                 }  else return 
false;
        }

        function 
makeCuadro($ruta$w$h$opc false) {
                 if (
$this->exist) {
                    if (
$w && $h) {
                       
$wi $this->width;
                       
$he $this->height;

                       if (
$wi $w || $he $h) {
                          if (
$wi $w $he $h) {
                             
$wp $w;
                             
$hp round(($he $wi) * $wp);
                          }  else {
                             
$hp $h;
                             
$wp round(($wi $he) * $hp);                       
                          }
                       }  else {
                          
$wp $wi;
                          
$hp $he;
                       }

                       
$this->createThumb($wp$hp);
                       
$this->reDim(0000$wp$hp$wi$he);

                       if (
$opc) return $this->thumb;
                       else return 
$this->setImg($ruta);
                    }  else return 
false;
                 }  else return 
false;
        }

        function 
makeCorte($ruta$w$h$opc false) {
                 if (
$this->exist) {
                    
$wi $this->width;
                    
$he $this->height;

                    if (
$w && $h) {
                       if (
$wi $w $he $h) {
                          
$wp $wi;
                          
$hp round(($h $w) * $wp);
                       }  else {
                          
$hp $he;
                          
$wp round(($w $h) * $hp);
                       }
                       
$lf round(($wi $wp) / 2);
                       
$tp round(($he $hp) / 2);

                       
$this->createThumb($w$h);
                       
$this->reDim(00$lf$tp$w$h$wp$hp);

                       if (
$opc) return $this->thumb;
                       else return 
$this->setImg($ruta);
                    }  else return 
false;
                 }  else return 
false;
        }

        private function 
reDim($dstX$dstY$srcX$srcY$dstW$dstH$srcW$srcH) {
                
imagecopyresampled($this->thumb$this->source$dstX$dstY$srcX$srcY$dstW$dstH$srcW$srcH);
        }

        private function 
setImg($ruta) {
                return 
imagejpeg($this->thumb$ruta);
        }
}
if (isset(
$_GET["img"])) {
   
$img $_GET["img"];
   if (
file_exists($img)) {
      
$ima = new Imagen($img);
      
$tip $_GET["tip"];
      
$w $_GET["w"];
      
$h $_GET["h"];

      if (
$tip == 0$thumb $ima->makeThumb(""$w$htrue);
      if (
$tip == 1$thumb $ima->makeCuadro(""$w$htrue);
      if (
$tip == 2$thumb $ima->makeCorte(""$w$htrue);

      if (
$thumb) {
         
header('Content-type: image/jpeg');
         
imagejpeg($thumb);
      }  else echo 
"Error";
   }
}
?>
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 16:57.