2011-09-12 16 views
10

tengo una página web generada a partir de Python que funciona como debería, usando:imágenes de salida a HTML usando pitón

print 'Content-type: text/html\n\n' 
print ""         # blank line, end of headers 
print '<link href="default.css" rel="stylesheet" type="text/css" />' 
print "<html><head>" 

Quiero añadir imágenes a esta página web, pero cuando hago esto:

sys.stdout.write("Content-type: image/png\n\n" + file("11.png","rb").read()) 
print 'Content-type: text/html\n\n' 
print ""         # blank line, end of headers 
print '<link href="default.css" rel="stylesheet" type="text/css" />' 
... 

todo lo que consigo es la imagen, a continuación, si coloco el código de la imagen a mi cabecera hTML/texto único que consigue es el texto de la imagen, es decir:

<Ï#·öÐδÝZºm]¾|‰k×®]žòåËÛ¶ÃgžyFK–,ÑôéÓU½zuIÒ}÷ݧ&MšH’V¯^­?üð¼1±±±zýõ×%IñññÚºu«*W®¬wß}W.—K3gÎÔÌ™ÿw‹Ú””I’¹w¤¥hdÒd½q÷X•Šˆ²m¿þfïÞ½*]º´éÈs;¥¤¤Ø¿ILLÔˆ#rÊ 

También, si lo intento:

print "<img src='11.png'>" 

me sale una imagen dañada en el navegador, y browing directamente a la imagen produce un error interno del servidor 500, con mi registro de Apache diciendo:

8)Exec format error: exec of './../../11.png' failed Premature end of script headers: 11.png 
+0

En lugar de mostrarnos sus declaraciones de impresión, nos muestran el archivo HTML generado. –

+0

¿Cuál es el diseño del archivo/directorio? Parece que Apache está tratando de ejecutar su 11.png como un script CGI. Normalmente almacena scripts CGI en '/ cgi-bin' y otros recursos en otros lugares. ¿Estás por casualidad mezclándolos? – Helgi

Respuesta

34

Puede utilizar este código para incrustar la imagen directamente en el código HTML:

data_uri = open('11.png', 'rb').read().encode('base64').replace('\n', '') 
img_tag = '<img src="data:image/png;base64,{0}">'.format(data_uri) 

print(img_tag) 

alternativa para Python < 2.6:

data_uri = open('11.png', 'rb').read().encode('base64').replace('\n', '') 
img_tag = '<img src="data:image/png;base64,%s">' % data_uri 

print(img_tag) 

para Python> 3 Vuelva a colocar la primera línea por

data_uri = base64.b64encode(open('Graph.png', 'rb').read()).decode('utf-8').replace('\n', '') 
+0

: 'str' objeto no tiene atributo 'formato' args = ("objeto 'str' no tiene atributo 'formato'",) mensaje = "objeto 'str' no tiene atributo 'format' " – Kilizo

+0

¿En qué versión de Python estás? Parece ser algo por debajo de 2.6 ya que str.format fue introducido allí (http://docs.python.org/library/stdtypes.html#str.formato) Agregué otra forma de formatear que debería funcionar en 2.5 – Glider

+0

Estoy usando 2.6.4, su segunda sugerencia funcionó, es la única solución que tiene hasta ahora, gracias, te daré el 'tic'. ¿Alguna idea de por qué no puedo simplemente usar "imprimir" '"? – Kilizo

2

Usted no se puede mezclar HTML y una imagen en el mismo documento de esa manera. Use la etiqueta <img> para incrustar imágenes en su HTML.

+1

Nit pequeño (que no creo que sea lo que OP tenía en mente de todos modos) es el uso de URI de datos para mezclar datos de imagen en la secuencia HTML directamente; ejemplo de la página de wikipedia es 'Red dot' – bgporter

+0

Usando esto, obtengo una 'imagen rota' en mi navegador, cuando navego directamente a la imagen, obtengo un error interno de 500 servidores. Mis registros de Apache dicen: 8) Error de formato de Exec: el ejecutor de './../../11.png' ha fallado Cabeceras de script de final prematuro: 11.png – Kilizo

2

Imágenes en las páginas web son típicamente una segunda petición al servidor. La página HTML en sí no tiene imágenes, simplemente referencias a imágenes como <img src='the_url_to_the_image'>. Luego, el navegador realiza una segunda solicitud al servidor y obtiene los datos de la imagen.

La única opción que tiene para servir imágenes y HTML juntos es utilizar una url data: en la etiqueta img.

+0

Vea mi última edición anterior. Gracias – Kilizo

1

No puede simplemente volcar datos de imagen en HTML.

Usted necesitará o bien tener el archivo servido y enlazar con él o incrustar la imagen codificada en base64.