0

我想将 TurboGears2 中的原始图像数据传递给 mako 模板以在 img 标签中使用

(即,scr=data:image/jpg,base64,${imagedata})。

图片是从sql server图片格式中获取的

我一直在努力做到这一点,因为传递给模板的所有内容都是 unicode,当模板尝试打开它时,我得到“UnicodeDecodeError:'ascii' codec can't decode byte...”。

这将在多次调用 /image?image#x.jpg 时节省大量时间。

4

1 回答 1

3

以下在修改quickstart基于 TurboGears 2.2.2 的项目时有效,配置为使用 Mako 模板系统。首先,我对以下内容进行了一些更改example/controllers/root.py

# …
from tg import config
import os
import base64

class RootController(BaseController):
    # …
    def _file_to_base64(self, path):
        with open(path, 'r') as stream:
            image_data = base64.b64encode(stream.read())

        return 'data:image/{0};base64,{1}' \
               .format(path.rsplit('.', 1)[-1].lower(), image_data)

    @expose('example.templates.index')
    def index(self):
        """Handle the front-page."""

        filename = os.path.join(config['paths']['static_files'],
                                'images', 'turbogears_logo.png')

        return dict(page='index', image_data=self._file_to_base64(filename))

那么make模板中的代码就变成了:

<img src="${image_data}" />

上面的代码是使用 Python 2.7.3 测试的。我不知道您的数据库图像格式或编码与从普通图像文件加载的数据有何不同。

于 2013-02-01T00:18:40.483 回答