Foros del Web » Programando para Internet » PHP »

Problemas con thumbs

Estas en el tema de Problemas con thumbs en el foro de PHP en Foros del Web. Hola: Utilizo el código encontrado en las faqs de el foro para generar miniaturas de un blob. El problema es que, tanto el ver.php, el ...
  #1 (permalink)  
Antiguo 17/08/2004, 12:46
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 4 meses
Puntos: 0
Problemas con thumbs

Hola:

Utilizo el código encontrado en las faqs de el foro para generar miniaturas de un blob. El problema es que, tanto el ver.php, el listar_imagenes.php como el formulario funcionan perfecto pero, no puedo ver las miniaturas. Aqui todo el codigo (solo modifique los datos de la base de datos)

FORMULARIO.PHP
Código PHP:
<?php 
if (isset($_GET['proceso'])){ 
echo 
$_GET['proceso']."<br>"

?> 
<FORM enctype="multipart/form-data" method="post" action="insertar.php"> 
Archivo: <INPUT type="file" name="archivo" size="30"> 
<INPUT type="submit" name="submit" value="Subir archivo"> 
</FORM>
INSERTAR.PHP
Código PHP:
<?php 
//Primero, arranca el bloque PHP y checkea si el archivo tiene nombre.  Si no fue asi, te remite de nuevo al formulario de inserción: 
// No se comprueba aqui si se ha subido correctamente. 
if (empty($_FILES['archivo']['name'])){ 
header("location: formulario.php?proceso=falta_indicar_fichero"); //o como se llame el formulario .. 
exit; 


//establece una conexión con la base de datos. 
$conexion mysql_connect("localhost","nj_admin","123456") or die("No se pudo realizar la conexion con el servidor."); 
mysql_select_db("nj_principal",$conexion) or die("No se puede seleccionar BD"); // tu_bd es el nombre de la Base de datos .. por siaca. 

// archivo temporal (ruta y nombre). 
$binario_nombre_temporal=$_FILES['archivo']['tmp_name'] ; 

// leer del archvio temporal .. el binario subido. 
// "rb" para Windows .. Linux parece q con "r" sobra ... 
$binario_contenido addslashes(fread(fopen($binario_nombre_temporal"rb"), filesize($binario_nombre_temporal))); 

// Obtener del array FILES (superglobal) los datos del binario .. nombre, tabamo y tipo. 
$binario_nombre=$_FILES['archivo']['name']; 
$binario_peso=$_FILES['archivo']['size']; 
$binario_tipo=$_FILES['archivo']['type']; 

//insertamos los datos en la BD. 
$consulta_insertar "INSERT INTO archivos (id, archivo_binario, archivo_nombre, archivo_peso, archivo_tipo) VALUES ('', '$binario_contenido', '$binario_nombre', '$binario_peso', '$binario_tipo')"
mysql_query($consulta_insertar,$conexion) or die("No se pudo insertar los datos en la base de datos."); 
header("location: listar_imagenes.php");  // si ha ido todo bien 
exit; 
?>
LISTAR_IMAGENES.PHP
Código PHP:
<?php 
    mysql_connect
("localhost","nj_admin","123456") or die ("no se ha podido conectar a la BD"); 

    
mysql_select_db("nj_principal") or die ("no se ha podido seleccionar la BD"); 

    
$sql "SELECT id,archivo_nombre,archivo_tipo,archivo_peso FROM archivos"
    
$consulta mysql_query($sql) or die ("No se pudo ejecutar la consulta"); 

    While (
$registro=mysql_fetch_assoc($consulta)){ 
        echo 
"<img src=\"ver.php?id=".$registro['id']."\">"
        echo 
"<br> Nombre archivo: ".$registro['archivo_nombre']; 
        echo 
"<br> Tipo archivo (MIME formato): ".$registro['archivo_tipo']; 
        echo 
"<br> Peso: ".$registro['archivo_peso']." bytes.<br><br>"
    } 

?>
VER.PHP
Código PHP:
<?php 
if(isset($_GET['id'])) { 

    
// you may have to modify login information for your database server: 
    
$conexion=mysql_connect("localhost","nj_admin","123456") or die ("no se ha podido conectar a la BD"); 

    
mysql_select_db("nj_principal") or die ("no se ha podido seleccionar la BD"); 

    
$sql "SELECT archivo_binario,archivo_tipo FROM archivos WHERE id='".$_GET['id']."'"

    
$consulta mysql_query($sql,$conexion); 

    
$datos mysql_result($consulta,0,"archivo_binario"); 
    
$tipo mysql_result($consulta,0,"archivo_tipo"); 

    
header("Content-type: $tipo"); 
    echo 
$datos


?>
VER_THUMBNAIL.PHP
Código PHP:
<?php 

// OJO, sólo funciona con imagnes en formato JPEG ... 

if(isset($_GET['id'])) { 

    
$conexion=mysql_connect("localhost","nj_admin","123456") or die ("no se ha podido conectar a la BD"); 
    
mysql_select_db("nj_principal") or die ("no se ha podido seleccionar la BD"); 
    
$sql "SELECT archivo_binario,archivo_tipo,archivo_nombre FROM archivos WHERE id='".$_GET['id']."'"
    
$consulta mysql_query($sql,$conexion); 
    
$imagen mysql_result($consulta,0,"archivo_binario"); 

    
// Envio cabeceras al navegador .. se indica que lo "que vá" es una imagen de formato MIME JPEG 
    
Header ("Content-type: image/jpeg"); 

    
// Generar el thumbnail: 

    // Se crea la imagen desde el campo binario de la BD 
    
$img imagecreatefromstring($imagen); 

    
// Tamaño del Thumbanil (de la imagen a generar ..) 
    
$picsize 125
     
    
// Se obtienen los datos del ancho y alto de la imagen. 
    
$new_w imagesx($src_img); 
    
$new_h imagesy($src_img); 

    
// Se calcula la relación alto/ancho 
    
$aspect_ratio $new_h $new_w
     
    
// Se ajusta al nuevo tamaño 
    
$new_w $picsize
    
$new_h abs($new_w $aspect_ratio); 

    
// Se crea la mascara de la imagen nueva 
    
$dst_img ImageCreateTrueColor($new_w,$new_h); 

    
// Se copia y reajusta el nuevo tamaño en la nueva imagen. 
     
imagecopyresampled($dst_img,$img,0,0,0,0,$new_w,$new_h,imagesx($img),imagesy($img)); 

    
// Se entrega al buffer de salida (navegador en este caso) la imagen en formato JPEG 
    // El tercer parámetro (100) indica la calidad de la imagen: en porcentaje relación calidad/peso imagen. 
    
imagejpeg($dst_img,'',100); 


?>
Y LOS QUE UTILIZO PARA MOSTRAR POR SEPARADO (CADA UNO EN SU CASO)
Código PHP:
<?php 

echo "<img src=ver.php?id=1>"

?>
Código PHP:
<?php 

echo "<img src=ver_thumbnail.php?id=1>"

?>
TODO FUNCIONA MENOS EL THUMBNAIL CUANDO QUIERO MOSTRARLO. SOLO SE VE LA EQUIS ROJA PEQUEÑA.

COMO DATO ADICIONAL, EN LA BASE DE DATOS, AL INSERTAR UNA IMAGEN, SE GUARDA COMO TIPO image/pjpeg Y NO COMO image/jpeg. PROBE CAMBIANDOLE EL CAMPO A UN REGISTRO YA ESTANDO ARRIBA A image/jpeg PERO YAMPOCO SE VE.

ESTARA ALLI LA FALLA, AL SUBIR EL ARCHIVO BLOB?

GRACIAS
  #2 (permalink)  
Antiguo 17/08/2004, 14:43
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Bueno . no hacía falta que copiases el código una vez más .. podrías referirte (y hacer el comentario) en el tema:

http://www.forosdelweb.com/showthrea...=binario+mysql

Te recomiendo que leas los comentarios de otros usuarios .. Sobre todo presta atención a que debes tener instalado las librerías GD (extensiones) en tu PHP .. Prueba con otro típo de imagenes. JPG no sólo está el "standard" .. está también JPG 2000 o algo así (no sé si corresponde a pjpeg) .. y no sé que soporte dá GD a ese tipo de imagenes.

Un saludo,
  #3 (permalink)  
Antiguo 17/08/2004, 15:04
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 4 meses
Puntos: 0
pues si tengo instaladas las librerias GD y me dicen los que administran el servidor que tambien iban a activarme image magic para poder trabajar con GD
  #4 (permalink)  
Antiguo 17/08/2004, 16:24
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Bueno ... ImageMagic son otras librerías gráficas .. el código que mencionas usa las librerías GD (que son más extendidas en cuanto a su uso bajo PHP).

Realiza algunas pruebas con: ver_thumbnail.php y observa que sucede.

0) Añade al principio del script:
error_reporting (E_ALL);
para observar todo error que se pueda estar probocando y no ves.
1) Ejecuta directamente por el URL: ver_thumbnail.php?id=1
2) Quita la referencia a header() de ver_thumbnail.php y ejecuta nuevamente la prueba 1.

En la prueba 1 .. deberías ver algún error si lo hay.
En la prueba 2 (si pasó la 1) deberías ver un montón de caracteres (ASCII) que son el própio archivo generado por el uso de la librería GD.

Un saludo,
  #5 (permalink)  
Antiguo 17/08/2004, 16:52
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 4 meses
Puntos: 0
Bien... al colocar

error_reporting (E_ALL);

al comienzo del ver_thumbnail.php y copiar directamente

http://njelectronic.com/ver_thumbnail.php?id=1

en el navegador, me arroja este resultado:

<br />
<b>Notice</b>: Undefined variable: src_img in <b>/home/nj/public_html/ver_thumbnail.php</b> on line <b>24</b><br />
<br />
<b>Warning</b>: imagesx(): supplied argument is not a valid Image resource in <b>/home/nj/public_html/ver_thumbnail.php</b> on line <b>24</b><br />
<br />
<b>Notice</b>: Undefined variable: src_img in <b>/home/nj/public_html/ver_thumbnail.php</b> on line <b>25</b><br />
<br />
<b>Warning</b>: imagesy(): supplied argument is not a valid Image resource in <b>/home/nj/public_html/ver_thumbnail.php</b> on line <b>25</b><br />
<br />
<b>Warning</b>: Division by zero in <b>/home/nj/public_html/ver_thumbnail.php</b> on line <b>28</b><br />
<br />
<b>Warning</b>: imagecreatetruecolor(): Invalid image dimensions in <b>/home/nj/public_html/ver_thumbnail.php</b> on line <b>35</b><br />
<br />
<b>Warning</b>: imagecopyresampled(): supplied argument is not a valid Image resource in <b>/home/nj/public_html/ver_thumbnail.php</b> on line <b>38</b><br />
<br />
<b>Warning</b>: imagejpeg(): supplied argument is not a valid Image resource in <b>/home/nj/public_html/ver_thumbnail.php</b> on line <b>42</b><br />


Ahora, quitando del comienzo de ver_thumbnail.php el

error_reporting (E_ALL);

y poniendo directamente en el navegador

http://njelectronic.com/ver_thumbnail.php?id=1

me arroja estos resultados:

<br />
<b>Warning</b>: imagesx(): supplied argument is not a valid Image resource in <b>/home/nj/public_html/ver_thumbnail.php</b> on line <b>24</b><br />
<br />
<b>Warning</b>: imagesy(): supplied argument is not a valid Image resource in <b>/home/nj/public_html/ver_thumbnail.php</b> on line <b>25</b><br />
<br />
<b>Warning</b>: Division by zero in <b>/home/nj/public_html/ver_thumbnail.php</b> on line <b>28</b><br />
<br />
<b>Warning</b>: imagecreatetruecolor(): Invalid image dimensions in <b>/home/nj/public_html/ver_thumbnail.php</b> on line <b>35</b><br />
<br />
<b>Warning</b>: imagecopyresampled(): supplied argument is not a valid Image resource in <b>/home/nj/public_html/ver_thumbnail.php</b> on line <b>38</b><br />
<br />
<b>Warning</b>: imagejpeg(): supplied argument is not a valid Image resource in <b>/home/nj/public_html/ver_thumbnail.php</b> on line <b>42</b><br />


Claro, antes de seguir tu consejo, ya habia echo algunos cambios en el codigo, po algo que encontre navegando en Internet
Código PHP:
<?php  

if(isset($_GET['id'])) { 

    
$conexion=mysql_connect("localhost","nj_admin","123456") or die ("no se ha podido conectar a la BD"); 
    
mysql_select_db("nj_principal") or die ("no se ha podido seleccionar la BD"); 
    
$sql "SELECT archivo_binario,archivo_tipo,archivo_nombre FROM archivos WHERE id='".$_GET['id']."'"
    
$consulta mysql_query($sql,$conexion); 
    
$imagen mysql_result($consulta,0,"archivo_binario");
    
$type mysql_result($consulta,0,"archivo_tipo"); 

    
// Envio cabeceras al navegador 
    
Header ("Content-type: $type"); 

    
// Generar el thumbnail: 

    // Se crea la imagen desde el campo binario de la BD 
    
$img imagecreatefromstring($imagen); 

    
// Tamaño del Thumbnail 
    
$picsize 125
     
    
// Se obtienen los datos del ancho y alto de la imagen. 
    
$new_w imagesx($src_img); 
    
$new_h imagesy($src_img); 

    
// Se calcula la relación alto/ancho 
    
$aspect_ratio $new_h $new_w
     
    
// Se ajusta al nuevo tamaño 
    
$new_w $picsize
    
$new_h abs($new_w $aspect_ratio); 

    
// Se crea la mascara de la imagen nueva 
    
$dst_img ImageCreateTrueColor($new_w,$new_h); 

    
// Se copia y reajusta el nuevo tamaño en la nueva imagen. 
     
imagecopyresampled($dst_img,$img,0,0,0,0,$new_w,$new_h,imagesx($img),imagesy($img)); 

    
// Se entrega al buffer de salida (navegador en este caso) la imagen en formato JPEG 
    // El tercer parámetro (100) indica la calidad de la imagen: en porcentaje relación calidad/peso imagen. 
    
imagejpeg($dst_img,'',100); 


?>
Agregue: $type = mysql_result($consulta,0,"archivo_tipo");
Cambie: Header ("Content-type: $type");

Como vamos ahora?
  #6 (permalink)  
Antiguo 17/08/2004, 19:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Parece que hay un error (en mi própio tutorial):

// Se obtienen los datos del ancho y alto de la imagen.
$new_w = imagesx($src_img);
$new_h = imagesy($src_img);

debería ser:
// Se obtienen los datos del ancho y alto de la imagen.
$new_w = imagesx($img);
$new_h = imagesy($img);

Pruebalo .. y me avisas. (para corregir el tutorial)

No sé por qué está $src_img .. mm ahora que veo ... alguien reportó (sutimentete .. por qué no me dí ni cuenta yo... ) que ver_thumbnail.php no funcionaba correctamente ...)

Un saludo,
  #7 (permalink)  
Antiguo 18/08/2004, 07:22
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 4 meses
Puntos: 0
Efectivamente, amigo Cluster, al cambiar lo que me indicaste si funciono. Tocaria entonces coregirlo en el tutorial.

Como para terminar de molestarte, en que parte del codigo puedo indicarle datos precisos como para que me muestre las miniaturas del mismo tamaño?
Al menos del mismo alto pues, al ser una galeria con texto bajo la foto, si una sale mas alta que otra se vera desproporcionadamente la ubicacion de los textos en columnas.

Muchas gracias por este foro y por compartir tu experiencia.
  #8 (permalink)  
Antiguo 18/08/2004, 08:19
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Aquí se modifica el tamaño del thumbnail .. se refiere al ancho y el resto de cálculos hacen que dicho ajuste sea proporcional guardando la la relación de alto/ancho:

// Tamaño del Thumbnail
$picsize = 125;

Un saludo,

PD: Gracias, voy a corregir el tutorial.
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 08:53.