Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema con thumbs en consulta de imagenes

Estas en el tema de Problema con thumbs en consulta de imagenes en el foro de PHP en Foros del Web. Hola, les comentare mi situación tengo 1 tabla en MYSQL llamada articulo, en el cual hay un campo que se llama imagen, este campo tiene ...
  #1 (permalink)  
Antiguo 21/02/2013, 01:40
 
Fecha de Ingreso: marzo-2011
Ubicación: Oaxaca
Mensajes: 252
Antigüedad: 13 años, 8 meses
Puntos: 17
Pregunta Problema con thumbs en consulta de imagenes

Hola, les comentare mi situación

tengo 1 tabla en MYSQL llamada articulo, en el cual hay un campo que se llama imagen, este campo tiene guardada la dirección y el nombre de la imagen que se este subiendo con un formulario previamente hecho.

las imágenes si se suben, el nombre con el directorio y la extensión lo guarda perfectamente en el campo

estoy haciendo una pagina de listado en php, mostrando en un listado de 10 registros por pagina, en la cuales muestro 4 campos de la tabla articulo, uno de ellos es la imagen, para mostrar la imagen uso los siguiente

Código HTML:
<img src="<?php echo $row_Salnuevid['imagen'] ?> "/> 
Hasta aquí no hay problema, ya que muestra lo que debería mostrar

el detalle es que cuando quiero dimensionar las imágenes a cierto tamaño, hay algunas que se desproporcionan muy feo

estuve leyendo un poco en Internet y por lo que leí, la solución a este detalle es implementar Thumbs

encontré algunos códigos de thumbs y la forma de implementarlos, pero los ejemplos que encontré aplican los thumbs poniendo manualmente el directorio con el nombre y la extensión de la imagen.
El problema que yo tengo es que mis imágenes las tengo en la siguiente variable
Código PHP:
<?php echo $row_Salnuevid['imagen'?>
y por mas que eh intentado, no eh podido, me arroja muchos errores, ya sea en haciendo referencia al archivo de thumbs en php, o que mi variable no puede ser referenciada por otra variable (algo así, no recuerdo muy bien el error).

Aquí va el código de 1 de los thumbs que eh intentado utilizar
Código PHP:
<?php
class thumb {

var 
$image;
var 
$type;
var 
$width;
var 
$height;

//---Método de leer la imagen
function loadImage($name) {

//---Tomar las dimensiones de la imagen
$info getimagesize($name);

$this->width $info[0];
$this->height $info[1];
$this->type $info[2];

//---Dependiendo del tipo de imagen crear una nueva imagen
switch($this->type){
case 
IMAGETYPE_JPEG:
$this->image imagecreatefromjpeg($name);
break;
case 
IMAGETYPE_GIF:
$this->image imagecreatefromgif($name);
break;
case 
IMAGETYPE_PNG:
$this->image imagecreatefrompng($name);
break;
}
}

//---Método de guardar la imagen
function save($name$quality 100) {

//---Guardar la imagen en el tipo de archivo correcto
switch($this->type){
case 
IMAGETYPE_JPEG:
imagejpeg($this->image$name$quality);
break;
case 
IMAGETYPE_GIF:
imagegif($this->image$name);
break;
case 
IMAGETYPE_PNG:
$pngquality floor(($quality 10) / 10);
imagepng($this->image$name$pngquality);
break;
}
}

//---Método de mostrar la imagen sin salvarla
function show() {

//---Mostrar la imagen dependiendo del tipo de archivo
switch($this->type){
case 
IMAGETYPE_JPEG:
imagejpeg($this->image);
break;
case 
IMAGETYPE_GIF:
imagegif($this->image);
break;
case 
IMAGETYPE_PNG:
imagepng($this->image);
break;
}
}

//---Método de redimensionar la imagen sin deformarla
function resize($value$prop){

//---Determinar la propiedad a redimensionar y la propiedad opuesta
$prop_value = ($prop == 'width') ? $this->width $this->height;
$prop_versus = ($prop == 'width') ? $this->height $this->width;

//---Determinar el valor opuesto a la propiedad a redimensionar
$pcent $value $prop_value;
$value_versus $prop_versus $pcent;

//---Crear la imagen dependiendo de la propiedad a variar
$image = ($prop == 'width') ? imagecreatetruecolor($value$value_versus) : imagecreatetruecolor($value_versus$value);

//---Hacer una copia de la imagen dependiendo de la propiedad a variar
switch($prop){

case 
'width':
imagecopyresampled($image$this->image0000$value$value_versus$this->width$this->height);
break;

case 
'height':
imagecopyresampled($image$this->image0000$value_versus$value$this->width$this->height);
break;

}

//---Actualizar la imagen y sus dimensiones
$info getimagesize($name);

$this->width imagesx($image);
$this->height imagesy($image);
$this->image $image;

}

//---Método de extraer una sección de la imagen sin deformarla
function crop($cwidth$cheight$pos 'center') {

//---Dependiendo del tamaño deseado redimensionar primero la imagen a uno de los valores
if($cwidth $cheight){
$this->resize($cwidth'width');
}else{
$this->resize($cheight'height');
}

//---Crear la imagen tomando la porción del centro de la imagen redimensionada con las dimensiones deseadas
$image imagecreatetruecolor($cwidth$cheight);

switch(
$pos){

case 
'center':
imagecopyresampled($image$this->image00abs(($this->width $cwidth) / 2), abs(($this->height $cheight) / 2), $cwidth$cheight$cwidth$cheight);
break;

case 
'left':
imagecopyresampled($image$this->image000abs(($this->height $cheight) / 2), $cwidth$cheight$cwidth$cheight);
break;

case 
'right':
imagecopyresampled($image$this->image00$this->width $cwidthabs(($this->height $cheight) / 2), $cwidth$cheight$cwidth$cheight);
break;

case 
'top':
imagecopyresampled($image$this->image00abs(($this->width $cwidth) / 2), 0$cwidth$cheight$cwidth$cheight);
break;

case 
'bottom':
imagecopyresampled($image$this->image00abs(($this->width $cwidth) / 2), $this->height $cheight$cwidth$cheight$cwidth$cheight);
break;

}

$this->image $image;
}

}
?>
segun esto, se manda a llamar de la siguiente forma

Código PHP:
<?
include_once('thumb.php');
$mythumb = new thumb();
$mythumb->loadImage('http://img43.imageshack.us/img43/3022/finalfantasyn.jpg');
$mythumb->resize(100'width');
$mythumb->show();
?>
y se utiliza segun asi

Código PHP:
echo '<img src="image_width_100.php"/>'

se me hace rara la expresión de arriba, me puse a jugar un rato con ese código para invocarlo, y es donde les comento que me arroja infinidad de errores (igual y creo que lo estoy haciendo muy mal )

hay otro código que implemente directamente en la pagina de listado, lo estoy usando de la siguiente forma

Código PHP:
<?php
//Autor: Víctor Simental
//http://port21.com.mx
 
$file $row_Salnuevid['imagen'];//Nombre de la imagen Original
 
function image_gd($file)
{
//Separamos las extenciones de archivos para definir el tipo de ext.
    
$extension explode(".",$file);
    
$ext count($extension)-1;
    
//Determinamos las extenciones permitidas.
        
if($extension[$ext] == "jpg" || $extension[$ext] == "jpeg")
        {
            
$image ImageCreateFromJPEG($file);
        }
        else if(
$extension[$ext] == "gif"){
            
$image ImageCreateFromGIF($file);
        }
        else if(
$extension[$ext] == "png"){
            
$image ImageCreateFromPNG($file);
        }
        else
        {
            echo 
"Error, extencion no permitida";
            die();
        }
 
    
$thumb_name substr($file,0,-5);//nombre del thumbnail
    
$width  imagesx($image);//ancho
    
$height imagesy($image);//alto
 
    
$nueva_anchura  100// Definimos el tamaño a 100 px
    
$nueva_altura = ($nueva_anchura $height) / $width // tamaño proporcional
 
        
if (function_exists("imagecreatetruecolor"))
        {
           
$thumb ImageCreateTrueColor($nueva_anchura$nueva_altura);//Color Real
        
}
        
//En caso de no encontrar la funcion, la saca en calidad media
        
if (!$thumb$thumb ImageCreate($nueva_anchura$nueva_altura);
 
    
ImageCopyResized($thumb$image0000$nueva_anchura$nueva_altura$width$height);
    
header("Content-type: image/jpeg");
    
ImageJPEG($thumb"t_".$thumb_name.".jpg"100);
    
imagedestroy($image);
 
return 
$image;
}
/* Forma de uso */
/*image_gd($file);*/    
?>
para mandar a llamar la imagen le hago asi

Código HTML:
<img src="<?php image_gd($file); ?>"/> 

lo raro de esto es que no me muestra error, pero tampoco me muestra nada de los registros



Ahora bien, el ultimo código que intente fue este

en un archivo llamado thumbails.php tengo lo siguiente

Código PHP:
<?php
$ruta       
=   $_GET['ruta'];
$ancho  =   $_GET['ancho'];
$alto       =   $_GET['alto'];
$fuente     =   @imagecreatefromjpeg($ruta);
$imgAncho   =   imagesx ($fuente);
$imgAlto    =   imagesy($fuente);
$imagen     =   imagecreatetruecolor($ancho,$alto);
imagecopyresized($imagen,$fuente,0,0,0,0,$ancho,$alto,
$imgAncho,$imgAlto);
header("Content-type: image/jpeg");
imagejpeg($imagen);

/*invocacion */
/*<img src="thumbnails.php?ruta=imagenes/imagen.jpeg&amp;amp;ancho=68&amp;amp;alto=58" alt="Mi Imagen" longdesc="Mi imagen" /> */

?>
lo mande a llamar de la siguiente forma

Código HTML:
<img src="thumbnails.php?ruta=<?php echo $row_Salnuevid['imagen'] ?> alt="Mi Imagen" longdesc="Mi imagen" /> 
lo curioso de esto es que si me muestra los registros, pero, en vez de que me aparezca la imagen, aparece una imagen pequeña y cortada (error de cargar la imagen)
tambien algo que note, es que este ultimo codigo biene algo limitado, ya que solo me deja hacer los thumbs en jpg, pero no en gif ni en PNG.

por cierto mi GD muestra estar habilitado (Enabled)

Muchas gracias amigos por su tiempo, espero su respuesta
  #2 (permalink)  
Antiguo 21/02/2013, 03:25
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Problema con thumbs en consulta de imagenes

Cita:
el detalle es que cuando quiero dimensionar las imágenes a cierto tamaño, hay algunas que se desproporcionan muy feo
Una solución sin complicarse la vida seria que redimensiones solo con una de las dimensiones....(es lo mismo que hace thumb.php pero sin crear la imagen nueva)

En función de tu diseño sera mas importante que todas las imagenes tengan el mismo ancho o el mismo alto, luego redimensiona solo la variable relevante, la otra dimension la calculará el navegador sin distorsionar la imagen....

Código PHP:
Ver original
  1. <img src="<?php echo $row_Salnuevid['imagen'] ?>" width="100" />

si haces esto todas tendran un ancho de 100 y el alto que les corresponda segun la proporción de la imagen original... si no tienes imagenes muy dispares puede ser una solución sin entrar a generar imagenes nuevas. A demas tienes la ventaja que ya has bajado la imagen original y por tanto la puedes mostrar ampliada sin bajarla de nevo...

Una imagen con proporción 1:2 se distorsiona si decides que debe medir 100:150 pero si solo le dices que debe medir 100 automaticamente se mostrará como 100:200 sin distorsionarse.

Incluso usando $info = getimagesize($row_Salnuevid['imagen']); podrias decidir sobre que dimension actuas....

Si es una imagen "ancha" usas

Código PHP:
Ver original
  1. <img src="<?php echo $row_Salnuevid['imagen'] ?>" width="100" />

si es "alta"

Código PHP:
Ver original
  1. <img src="<?php echo $row_Salnuevid['imagen'] ?>" height="100" />

con lo que todas estaran dentro de un cuadro de 100:100 sin distorsinarse....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 21/02/2013 a las 03:41
  #3 (permalink)  
Antiguo 21/02/2013, 10:56
 
Fecha de Ingreso: marzo-2011
Ubicación: Oaxaca
Mensajes: 252
Antigüedad: 13 años, 8 meses
Puntos: 17
Respuesta: Problema con thumbs en consulta de imagenes

Muchas gracias amigo por responder

pues seguí tu consejo, y me funciono (lo delimite a lo alto, ya que tengo imágenes muy largas a lo alto)

Ahora me surge la siguiente pregunta
¿que en especial tienen los thumbs si esto se puedo delimitar directamente en html?


muchas gracias, y espero su respuesta
  #4 (permalink)  
Antiguo 21/02/2013, 11:01
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 13 años, 2 meses
Puntos: 397
Respuesta: Problema con thumbs en consulta de imagenes

Pues hay plugins que te permiten jugar con la imagenes, ademas bajan de peso, permiten cortarlas, girarlas, cambiar de tamaño etc

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #5 (permalink)  
Antiguo 21/02/2013, 14:03
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Problema con thumbs en consulta de imagenes

thumbnails (thumbs para los amigos): inglés miniatura. Es una muestra en pequeño de la imagen original , ventaja que pesa muy poco...

Las librerias que los gestinan permiten hacer automaticamente diversas cosas con la imagen original generando una nueva al vuelo, como ya te han dicho... en tu caso no necesitas crear la nuevas imagenes al vuelo, puesto que subes tu las imagenes. Si quieres ganar esa ventaja del peso para que las listas se carguen mas rapido, sube miniaturas hechas por ti en tu editor de imagenes... solo tienes que inventar una regla para poderte referir a ellas con el path de la imagen original...

P.E.

$row_Salnuevid['imagen']="images/articulos/producto1.jpg"

<img src="<?php echo $row_Salnuevid['imagen'] ?>" /> Original

thumbs/
images/articulos/producto1.jpg

<img src="thumbs/<?php echo $row_Salnuevid['imagen'] ?>" /> la miniatura


con lo que tienes en la base de datos puedes llamar la imagen orginal o el thumbnail si los guardas estrategicamente como te he mostrado.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 21/02/2013 a las 14:17
  #6 (permalink)  
Antiguo 23/02/2013, 00:01
 
Fecha de Ingreso: marzo-2011
Ubicación: Oaxaca
Mensajes: 252
Antigüedad: 13 años, 8 meses
Puntos: 17
Respuesta: Problema con thumbs en consulta de imagenes

Gracias quimfv, intentare llevar tu consejo a la practica, ya que si se me hace interesante aprender hacer thumbs

Etiquetas: imagenes, listado, mysql, thumbnails, variablesphp
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 14:08.