Ver Mensaje Individual
  #3 (permalink)  
Antiguo 21/07/2009, 09:26
santhy
 
Fecha de Ingreso: febrero-2006
Mensajes: 134
Antigüedad: 18 años, 2 meses
Puntos: 10
Respuesta: Problema con headers y phplot

Creo que tienes un problema de concepto.

Para que una imagen se muestre en una página web, es decir, para embeber una imagen en HTML (dicho más técnicamente ^^) necesitas una etiqueta <img />.
Es decir, si tenemos una web sencilla como
Código HTML:
<!DOCTYPE html>
<html><head><title>Prueba</title><meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
<body>
<h1>Test</h1>

<img src="http://www.forosdelweb.com/f18/problema-con-headers-phplot-720549/imagen.php?datos=..." alt="imagen" />
</body>
</html> 
entonces al cargarse la página (supongamos index.php) lo que hace es que el navegador pida la imagen a imagen.php

Esto es muy bonito, pero demos algunos puntos:
Debido a que la imagen es una imagen, en sí misma, no es posible introducir texto, capas u otros contenidos hipertextuales en ella. Es decir, todo lo que se introduzca en la imagen pasa a ser parte de ella.

Ergo, no puedes utilizar el mismo script php para crear la página HTML y para servir la imagen.

La razón de esto es que son tipos de contenido diferentes. Como tú indicas, hay un problema de cabeceras. Las cabeceras sirven para que el navegador sepa qué tipo de archivo está "bajando".
En una web, éste suele ser "Content-Type: text/html" o bien "Content-Type: application/xml" o similares.
En el caso de una imagen, esta será "Content-Type: image/gif", image/jpeg, image/png o similares, dependiendo también del formato de la imagen.

Sin embargo, sí hay una forma para introducir tu gráfico EN la página (x)HTML.
Y la forma para hacerlo es utilizar el protocolo data:

No funciona en todos los navegadores, pero sí en la mayor parte de ellos.

Quedaría algo como esto:
Código HTML:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGP
C/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9YGARc5KB0XV+IA
AAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAF1J
REFUGNO9zL0NglAAxPEfdLTs4BZM4DIO4C7OwQg2JoQ9LE1exdlYvBBeZ7jq
ch9//q1uH4TLzw4d6+ErXMMcXuHWxId3KOETnnXXV6MJpcq2MLaI97CER3N0
vr4MkhoXe0rZigAAAABJRU5ErkJggg" alt="Punto rojo" /> 
.

para hacer esto una vez tienes la imagen, es decir:

Código PHP:
/* Transformaciones */
// NO hagas echo $imagen, y antes del imagedestroy($imagen)

echo '<img src="data:image/png;base64,' base64_encode($imagen) . '" alt="grafico" />';
imagedestroy($imagen); 
Con PHPlot no estoy seguro de como se accede a la imagen (la misma que con la función $imagen = imagecreate(), por ejemplo).

Espero que mi respuesta te ayude ;)

Un saludo!
__________________
Si te ha gustado lo que he dicho, puedes darme algún punto de reputación, que no te cuesta nada ^_^.

Di no a los juicios de valor!