【问题标题】:Output images to html using python使用python将图像输出到html
【发布时间】:2011-11-15 10:00:00
【问题描述】:

我有一个从 python 生成的网页,它可以正常工作,使用:

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>"

我想在这个网页上添加图片,但是当我这样做时:

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" />'
...

我得到的只是图像,然后如果我将图像代码放在我的 html/text 标题下方,我得到的只是图像中的文本,即:

<Ï#·öÐδÝ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Ê

另外,如果我尝试:

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

我在浏览器中看到损坏的图像,直接浏览图像会产生 500 内部服务器错误,我的 apache 日志显示:

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

【问题讨论】:

  • 不是向我们展示您的打印语句,而是向我们展示生成的 html 文件。
  • 什么是文件/目录布局?看起来 Apache 正在尝试将您的 11.png 作为 CGI 脚本执行。您通常将 CGI 脚本存储在 /cgi-bin 下,并将其他资源存储在其他地方。你有没有机会混合它们?

标签: python html http-headers cgi


【解决方案1】:

您可以使用此代码将图像直接嵌入到您的 HTML 中: Python 3

import base64
data_uri = base64.b64encode(open('Graph.png', 'rb').read()).decode('utf-8')
img_tag = '<img src="data:image/png;base64,{0}">'.format(data_uri)
print(img_tag)

Python 2.7

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)

Python

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)

【讨论】:

  • : 'str' 对象没有属性 'format' args = ("'str' 对象没有属性 'format'",) message = "'str'对象没有属性“格式””
  • 你用的是什么python版本?似乎低于 2.6,因为那里引入了 str.format (docs.python.org/library/stdtypes.html#str.format) 我添加了另一种格式,应该适用于 2.5
  • 我正在使用 2.6.4,您的第二个建议有效,这是迄今为止唯一的解决方案,谢谢,我会给您打勾!知道为什么我不能简单地使用“print ''”吗?
  • 你真的应该使用普通的。找出失败的原因。
  • 不要忘记将import base64添加到Python版本> 3案例的脚本中。
【解决方案2】:

网页中的图像通常是对服务器的第二次请求。 HTML 页面本身没有图像,只是引用了像&lt;img src='the_url_to_the_image'&gt; 这样的图像。然后浏览器向服务器发出第二次请求,并获取图像数据。

您必须同时提供图像和 HTML 的唯一选项是在 img 标记中使用 data: 网址。

【讨论】:

    【解决方案3】:

    您不能只将图像数据转储到 HTML 中。

    您需要提供文件并链接到该文件,或者嵌入以 base64 编码的图像。

    【讨论】:

      猜你喜欢
      • 2020-03-24
      • 2011-04-26
      • 2017-12-31
      • 2017-07-26
      • 1970-01-01
      • 2011-04-11
      • 2016-07-05
      • 1970-01-01
      • 2012-02-11
      相关资源
      最近更新 更多