Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/02/2013, 01:40
juangemelo01
 
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