Google Glass Tile从dataURL插入图片

时间:2013-09-04 17:37:36

标签: python django google-mirror-api

我正在使用Django在Python中编写我的玻璃器皿应用程序,并且我有一个dataURL,我想将其作为图像插入到玻璃图块中。我尝试将URL本身作为图像插入:

dataURL = canvas_file.value() //Just extracting the value of the dataURL from a Django form

tile = {
        "html": "<img src={0}>".format(dataURL),
        "speakableType":"Description.",
        "speakableText":message,
        "menuItems": [ { "action":"READ_ALOUD"}, ],
        "notification": {
        "level": "DEFAULT"
         }
        }

service.timeline().insert(body=tile).execute()

但是数据网址真的很长(浏览器拒绝导航到它的时间太长),并且glass不想从其源加载图像。有没有办法在Python中编码数据网址,以便我可以将其作为媒体附件插入?

1 个答案:

答案 0 :(得分:0)

数据URI本质上是base64编码的图像。

例如,在此图片中:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" />

这是图像的base64数据:

iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg==

有了这个,将数据URI的base64部分转换回二进制文件以作为附件进行流式传输非常简单:

import base64
import io

from apiclient import errors
from apiclient.http import MediaIoBaseUpload

...

timeline_item = {'text': 'Hello world'}
media_body =  MediaIoBaseUpload(io.BytesIO(base64.b64decode('iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==')), mimetype="image/png", resumable=True)

service.timeline().insert(body=timeline_item, media_body=media_body).execute()