使用Python将图像输出到HTML

22 投票
3 回答
66182 浏览
提问于 2025-04-17 02:06

我有一个用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/文本头部下面,我看到的只是图片的文字内容,也就是:

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

3 个回答

1

你不能直接把图片数据放进HTML里。

你需要要么把文件放到服务器上,然后链接到这个文件,要么把图片用base64编码嵌入到代码里。

2

网页上的图片通常需要向服务器发出第二次请求。也就是说,HTML页面本身并不包含图片,而只是包含指向图片的链接,比如 <img src='the_url_to_the_image'>。然后,浏览器会向服务器发出第二次请求,获取图片的数据。

如果你想把图片和HTML一起提供,唯一的办法就是在 img 标签中使用 data: 网址。

62

你可以使用这段代码直接在你的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版本低于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)

撰写回答