Salida de flujo de imagen sin procesar en lugar de jpeg, cambio de tamaño de imagen sobre la marcha

Tengo una función PHP que cambia el tamaño de la imagen sobre la marcha para la creación de miniaturas.

Tengo problemas porque solo muestra el flujo de imágenes sin procesar en lugar de la imagen real.

Mi código está usando una función llamada miniatura:

$thumbnail = thumbnail($item['filename'], 209, 137);
imagejpeg($thumbnail);

He probado a poner:

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

Sin embargo, esto solo espera que la página completa sea una imagen. No tengo ni idea de adónde ir desde aquí, he estado trabajando en ello durante un tiempo. Preferiría no guardar la imagen en el disco, aunque parece que esto podría ser necesario.

preguntado el 22 de mayo de 12 a las 21:05

Esta técnica rompe la capacidad del navegador para almacenar en caché la imagen y puede suponer una gran carga para el servidor. -

¿Hay alguna manera de hacerlo sin guardar la imagen y aún así hacer que se muestre? Realmente no me importa la carga del servidor. -

Debe configurar el encabezado antes de generar la imagen. -

Lo hice, todavía intenta ver toda la página como una imagen. -

Estoy confundido. ¿Qué quieres lograr? -

3 Respuestas

Tu tampoco

Hazlo la forma normal

Esto significa que apuntas a una url, y servir el contenido de una imagen:

<img src="myimage.php">

y myimage.php es un script que se parece a:

header('Content-type: image/jpeg');
imagejpeg($thumbnail);
die;

Esta técnica tiene la ventaja de ser... la forma normal de hacer las cosas.

OR

Salida de la imagen en línea

Usar uris de datos salida del contenido como un cadena codificada en base64

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot">

Esta técnica es más apropiada con imágenes pequeñas.

Tiene la ventaja de significar que todas las imágenes están en la solicitud http principal, con la desventaja (posiblemente considerable) de hacer que la página sea más difícil de editar/construir y posiblemente negar los beneficios del almacenamiento en caché del navegador (a menos que la página html esté en caché).

Ser normal es más fácil

Con respecto a esta declaración en la pregunta:

Sin embargo, esto solo espera que la página completa sea una imagen.

Así es, si lo hace de la manera normal, desea señalar su script php con el src atributo de una etiqueta de imagen y servidor , solamente una imagen, es decir, exactamente la misma respuesta que si estuviera apuntando a un archivo de imagen con un navegador.

A menos que tenga una buena razón para hacer las cosas de manera diferente, la forma "normal" es un buen lugar para comenzar.

Respondido el 20 de junio de 20 a las 10:06

todo el script está incluido en una página html que está destinada a mostrar todas las imágenes. ¿Debería cambiarlo para tener un script para la creación de imágenes que esté incluido en otro script cuyo único propósito es reproducir imágenes? - Craig Traynor

No entiendo su comentario editado, si desea que funcione, elija entre las opciones presentadas anteriormente. Sugerencia: los URI de datos no son comunes - AD7seis

voy a probar con el segundo. el flujo actual que obtengo es de imagejpeg($thumbnail); tan intentando: echo ' '; Aunque estoy bastante seguro de que me equivoqué en alguna parte aquí - Craig Traynor

bueno ... necesitarías magia para que eso funcione, ya que la salida para imagejpeg no está codificada en base64 (otra pista de codificación de google base64 y php). buena suerte - AD7seis

ahh sería genial si el código funcionara como magia, gracias por la ayuda - Craig Traynor

Puede apuntar una etiqueta html img a un archivo php.

<img src='thumbnail.php?file=<?php echo $item['filename']; ?>' />

Luego, en su archivo php, muestra la imagen y cambia los encabezados, ya que todo lo que está haciendo es mostrar una imagen.

$thumbnail = thumbnail($_GET['filename'], 209, 137);
imagejpeg($thumbnail);

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

contestado el 22 de mayo de 12 a las 21:05

Mi html tiene: que tiene el script, pasa por una pequeña base de datos de imágenes y cambia de tamaño a medida que avanzo, quiero que pueda mostrarlas correctamente, este caso particular solo tiene 1 imagen: Craig Traynor

Sí, no desea usar la función de inclusión de php, desea usar la etiqueta html img para que trate a cada uno de forma independiente. - pitchinado

Todavía tiene que tener una función php pasando por cada miembro de la base de datos. - Craig Traynor

La idea es que en lugar de usar archivos de imagen como src para su img etiquetas en su HTML, usará un archivo PHP como el src que , solamente muestra la imagen única que le interesa en esa ubicación en particular, usando algo así como parámetros GET para determinar de qué imagen mostrar una miniatura. Entonces, en este caso, tendría una página HTML que se refiere a un script PHP muchas veces, pero usando diferentes parámetros cada vez. Y este script PHP generaría la imagen y la mostraría como si fuera una página completa. - Daan

Daan correcto, su archivo scripts/images.php necesita hacer eco de las etiquetas de imagen html para no mostrar las imágenes. No se puede hacer todo en un guión. Debe separar la obtención de varias imágenes de la base de datos y la visualización de las imágenes. - pitchinado

Debe insertar la imagen como lo haría con una imagen normal en HTML y crear la imagen en un archivo PHP separado:

image.php

<?php
$img = imagecreate(100,100); //Create an image 100px x 100px
imagecolorallocate($img, 255,0,0); //Fill the image red
header('Content-type: image/jpeg'); //Set the content type to image/jpg
imagejpeg($img); //Output the iamge
imagedestroy($img); //Destroy the image
?>

mipaginaweb.html

<img src="image.php" />

contestado el 22 de mayo de 12 a las 21:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.