我需要让Python文件充当图像。即,Python文件的路径将在网页的标记内使用。 Python文件将使用PIL动态创建图像(没有中间保存到文件)。
我正在使用Python 2.7,Web.Py,& PIL,在32位Windows XP上开发,使用WAMPSS Web服务器,并使用最新的Chrome。
我几乎那里。我想。
这是我的python图像文件的缩减示例:
#!/home/bin/python
# #############################################################################
import web, sys
from PIL import Image, ImageDraw, ImageFont
# #############################################################################
class debug:
def GET(self):
# drawing with PIL (Python Image Library)
# create a new 256x256 pixel image surface (default is black bg)
img = Image.new("RGB", (256, 256))
# set up the new image surface for drawing
draw = ImageDraw.Draw (img)
# REMOVED - Image manipulation
# Output the image to the browser
sys.stdout.write('Status: 200 OK\r\n')
sys.stdout.write('Content-type: image/png\r\n')
sys.stdout.write('\r\n')
img.save(sys.stdout, "PNG")
# #############################################################################
urls = ( '/debug.py', 'debug' )
app = web.application(urls, globals())
if __name__ == "__main__":
app.run()
# #############################################################################
现在,这有效......有点。
如果我直接在浏览器(本地AMPSS服务器)中查看此文件,则会显示该图像。但是,与类似的1k PNG图像相比,显示/服务器(5秒以上)需要很长时间。 Chrome控制台说它失败了(虽然我可以看到图片)
我认为浏览器期待其他我不发送的内容?
当我在JQuery和OnLoad事件中使用此图像时,实际出现了问题。事情变得......奇怪......因为缺少一个更好的词。我似乎有一些事件(不是我的)火,它会在加载后几秒钟清除图像。显示。
Chrome控制台说在检索图像时GET失败了(虽然它确实显示了图像,至少在JS中的某些东西再次消失之前!)
有趣的是,这个问题似乎没有出现在最新的Firefox中。 加载时间在最新的Opera中被夸大了,但JS并没有出现故障。在IE8中也一样
为了让事情更加混乱,我有两台Windows XP(32位)开发机器。 JS故障不会发生在其中一个上面。 Chrome控制台不会列出任何错误!
我在网上对图像文件进行了演示:LINKY 我在开发页面中使用此文件:LINKY 如果您点击白色图像持有者,Jquery / JS将激活。
我不知道这是否适用于您的设置。我只是为了完整而链接到这里。
关于我缺少的任何想法?
答案 0 :(得分:2)
在web.py中,您应该返回必须发送到浏览器的内容。也可以使用web.header
设置HTTP标头。
将图片保存到StringIO
并返回其内容:
import StringIO
# in GET(self):
web.header('Content-type', 'image/png')
buf = StringIO.StringIO()
img.save(buf, "PNG")
contents = buf.getvalue()
return contents