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->image, 0, 0, 0, 0, $value, $value_versus, $this->width, $this->height);
break;
case 'height':
imagecopyresampled($image, $this->image, 0, 0, 0, 0, $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->image, 0, 0, abs(($this->width - $cwidth) / 2), abs(($this->height - $cheight) / 2), $cwidth, $cheight, $cwidth, $cheight);
break;
case 'left':
imagecopyresampled($image, $this->image, 0, 0, 0, abs(($this->height - $cheight) / 2), $cwidth, $cheight, $cwidth, $cheight);
break;
case 'right':
imagecopyresampled($image, $this->image, 0, 0, $this->width - $cwidth, abs(($this->height - $cheight) / 2), $cwidth, $cheight, $cwidth, $cheight);
break;
case 'top':
imagecopyresampled($image, $this->image, 0, 0, abs(($this->width - $cwidth) / 2), 0, $cwidth, $cheight, $cwidth, $cheight);
break;
case 'bottom':
imagecopyresampled($image, $this->image, 0, 0, abs(($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, $image, 0, 0, 0, 0, $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;ancho=68&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