【问题标题】:How to pass raw image data in turbogears to mako template for scr=data:image/jpg如何将 turbogears 中的原始图像数据传递给 scr=data:image/jpg 的 mako 模板
【发布时间】:2013-01-14 21:24:49
【问题描述】:

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

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

图片取自sql server图片格式

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

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

【问题讨论】:

    标签: base64 mako turbogears turbogears2


    【解决方案1】:

    在修改基于 quickstart'ed 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 测试的。我不知道您的数据库图像格式或编码与从普通图像文件加载的数据有何不同。

    【讨论】:

    • 我知道我回答得这么晚了,但是如果答案对你有用,那么如果你接受它作为答案会很棒——这样其他用户就可以从知道答案有效的过程中受益。如果您有任何问题,请告诉我。
    猜你喜欢
    • 2021-09-27
    • 2012-10-14
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 2011-12-26
    • 2013-05-14
    相关资源
    最近更新 更多