Foros del Web » Programando para Internet » PHP »

Problema con Opera y Thumbs (I.E. funciona bien)

Estas en el tema de Problema con Opera y Thumbs (I.E. funciona bien) en el foro de PHP en Foros del Web. Cuando quiero generar una imagen más pequeña a partir de una mayor, el Opera me muestra en pantalla caracteres raros: Cita: ÿØÿà´»ÜÿMRËZ‘B¬Ñ.™u!aTüÖ¤21¦ë‹Ù‹-E#€8$„¹4Ü法VËPæ?÷�!bÇ$æ’ŠÎí—dªa¸àw¤¥NJ�efg:JÜ Ñ/QEê˜r[Ȳ‘ž1V!�Ää`æRb¸)`!J§:f²ªä¬-Q]æ@j)¥ÅC,{‡ψæå|¥F× Ü ê?:¯ps1Ç@)Æ/-²Ü ...
  #1 (permalink)  
Antiguo 17/08/2004, 08:39
Avatar de Terminator ®  
Fecha de Ingreso: julio-2004
Ubicación: San Isidro, Buenos Aires
Mensajes: 176
Antigüedad: 19 años, 9 meses
Puntos: 0
Problema con Opera y Thumbs (I.E. funciona bien)

Cuando quiero generar una imagen más pequeña a partir de una mayor, el Opera me muestra en pantalla caracteres raros:
Cita:
ÿØÿà´»ÜÿMRËZ‘B¬Ñ.™u!aTüÖ¤21¦ë‹Ù‹-E#€8$„¹4Ü法VËPæ?÷�!bÇ$æ’ŠÎí—dªa¸àw¤¥NJ�efg:JÜ Ñ/QEê˜r[Ȳ‘ž1V!�Ää`æRb¸)`!J§:f²ªä¬-Q]æ@j)¥ÅC,{‡ψæå|¥F× Ü ê?:¯ps1Ç@)Æ/-²Ü ŽRBTäW�ZmÂÏMN˜%} VKò;zœU†EjŽÕvÛ¯¿55z¸ziQŠhÂnòdo¸pÄT^LÈ~V«fŽµ3ÃS“ÓA ©´UY'O¼™:NPEH ›”ŠÒ�°WŒ¯êK’} wLÌcO»Ðñɨ†.�óÅ:H$ŽL…$⤳�„›ÝH¦}kÎJµLBç½ïøÞ* ¨¢Šú”(¢Š
Visualizando lo mismo con el Internet Explorer, la imagen se muestra sin problemas... con calidad baja pero con TrueColor se muestra muy bien.
Sin dudas es un problema de Opera pero lo posteo acá porque es por un tema relacionado con la funcion de PHP y no sé cual puede ser la solucion.

El código que uso el siguiente:
Cita:
<?

// Utilizando imagecopyresized() para crear un thumbnail automatico

$nombre_imagen = "foto_silla2.jpg";

// Debo indicar bien el destino del directorio de la imagen
$imagen_origen = ImageCreateFromJPEG($nombre_imagen);

// Calculo el tamaño de la imagen original
$tam_ancho = imagesx($imagen_origen);
$tam_alto = imagesy($imagen_origen);


// Calculo la mitax, para reducirla al 50 %
$ancho = $tam_ancho /2;
$alto = $tam_alto /2;

// Creo la nueva imagen de destino con las medidas (todavia esta vacia)
// Si la imagen no se ve en calidad adecuada reemplazar imagecreate por imagecreatetruecolor
$imagen_destino = ImageCreate($ancho, $alto);
imagecopyresized($imagen_destino, $imagen_origen, 0, 0, 0, 0, $ancho, $alto, $tam_ancho, $tam_alto);

// Guardamos la imagen en un archivo con le mismo nombre de la imagen original, pero precedido de thumb_
$nombre_destino = "thumb_".$nombre_imagen;

// Guardamos la imagen_generada
ImageJPEG($imagen_destino,$nombre_destino,75);

// Mostramos la imagen
ImageJPEG($imagen_destino,'',75);
ImageDestroy($imagen_destino);
die();




?>

Por otro lado, un ejemplo similar anda muy bien en ambos navegadores:
Cita:
<?

// Utilizando imagecopyresized()

// Definimos la imagen a utilizar
$imagen = ImageCreateFromJPEG("foto_silla2.jpg");
Header("Content-type: image/jpeg");

imagecopyresized ($imagen, $imagen, 1, 1, 100, 100, 80, 80, 100, 100);

// Mostramos la imagen que deberia ser verde
ImageJPEG($imagen, '', 75);

// Destruimos la imagen
ImageDestroy($imagen);


?>
Informacion GD:
Cita:
GD Support enabled
GD Version bundled (2.0.23 compatible)
FreeType Support enabled
FreeType Linkage with freetype
GIF Read Support enabled
JPG Support enabled
PNG Support enabled
WBMP Support enabled
XBM Support enabled
Versión del Opera: 7.54 (en Inglés)
Versión PHP: 4.3.8
Version Apache: 2.0.50

Gracias.

Última edición por Terminator ®; 17/08/2004 a las 08:48
  #2 (permalink)  
Antiguo 17/08/2004, 09:16
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Si añades la cabera HTTP que indica de que tipo es el dato que vas a enviar a tu cliente (navegador) en el código que dices que no anda en Opera .. debría funcinonar correctamente:

Header("Content-type: image/jpeg");

De hecho IE tendría que comportarse igual que Opera por qué en el primer ejemplo no definistes que tipo de "dato" estás enviando ..

Un saludo,
  #3 (permalink)  
Antiguo 17/08/2004, 09:31
Avatar de Terminator ®  
Fecha de Ingreso: julio-2004
Ubicación: San Isidro, Buenos Aires
Mensajes: 176
Antigüedad: 19 años, 9 meses
Puntos: 0
Anduvo perfecto...
No me di cuenta de eso porque esos ejemplos son de un libro, no los he hecho yo que recien empiezo con PHP.

Ahora bien... he visto que funciona colocandolo en cualquier parte del código menos despues del die(). Esto es así siempre o es mejor colocarlo en algún lugar en especial?

Existen códigos similares a este Header("Content-type: image/jpeg"); ???
pregunto porque seguro me voy a topar con algún otro que me cause un dolor de cabeza...

Muchas gracias, ahora voy a poder continuar con la sección wallpapers tranquilo, ya que si no andaba en Opera no hacía nada
  #4 (permalink)  
Antiguo 17/08/2004, 12:16
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Ahora bien... he visto que funciona colocandolo en cualquier parte del código menos despues del die(). Esto es así siempre o es mejor colocarlo en algún lugar en especial?
En realidad da igual donde lo coloques .. eso sí, antes de la llamada a esa función header() (para cualquier tipo de envio de cabeceras HTTP al cliente) .. NO debe existir nada de salida al cliente .. (nada de HTML, de echo "algo" .. javascript .. etc)

Justamente un "die()" es la función para "terminar el script con un mensaje de aviso" .. eso ya es considerado como "salida" al cliente.

Cita:
Existen códigos similares a este Header("Content-type: image/jpeg"); ???
pregunto porque seguro me voy a topar con algún otro que me cause un dolor de cabeza...
Bueno .. si, .. todo eso lo define el protocolo HTTP con el cual estás trabajando .. Lo peudes ver en sus RFC's correspondientes (usa google: rfc http y las veras). De hecho con esa cabecera indicas que tipo de archivo es .. pero por ejemplo te faltaría algunas más como la de indicar el nombre final que tendrá el archivo (si le das a tu "thumb" a "guardar como ...." de esa imagen veras que todas tendrán el nombre del script.php que usastes .. ), o indicar el "peso" del archivo (como para que un gestor de descaga calcule bien cuanto queda de la misma) y .. así un largo etc.

Sólo recuerda que esto de las "cabeceras HTTP" no son própias de PHP .. PHP sólo te pone a tu disposición funciones como .. header() para que las "lanzes" al cliente.

Un saludo,
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:54.