HTML 中的 Cherrypy 图片

Cherrypy image in HTML

如何将图像从 Cherrypy 流式传输到 HTML 页面?

我可以自己获取图像,但我正在尝试将其放入我定义的 HTML 大纲中:

class HelloWorld(object):
    @cherrypy.expose
    def index(self):
        cherrypy.response.headers['Content-Type'] = "image/png"
        plt.plot([1,2,3,4])
        img = StringIO.StringIO()
        plt.savefig(img,format='png')
        imagedata = img.getvalue()
        return """<html>
          <head></head>
          <body>
          <p>Yo!</p>
              <img src=imagedata />
          </body>
        </html>
        """

cherrypy.quickstart(HelloWorld())

上面的代码没有输出任何东西——甚至 Yo! 语句也不输出。

我知道怎么做了。

你必须:

  1. 将图形保存到 StringIO 对象中
  2. 获取对象内容getvalue()
  3. 使用 base64.b64encode()
  4. 将内容编码为 base64
  5. 将该 base64 字符串放入带有正确 data: 参数的 img 标签中,如下所示:

    class HelloWorld(object):
    
        @cherrypy.expose
        def index(self):
    
            plt.plot([1,2,3,4])
    
            img = StringIO.StringIO()
    
            plt.savefig(img,format='png') # step 1.
    
            imagedata = img.getvalue() # step 2.
    
            encoded = base64.b64encode(imagedata) # step 3.
    
            page =  """<html>
              <head></head>
              <body>
                  <img src="data:image/png;base64,{0}" />
              </body>
            </html>
            """
            return page.format(encoded) # step 4.
    
    cherrypy.quickstart(HelloWorld())