导入图像时,我收到的值与创建图像时的值不同。如果我导入图像
img = open('16x9.gif','rb')
img.read().encode('base64')
# 'R0lGODlhEAAJAIAAAAAAAAAAACH5BAEAAAAALAAAAAAQAAkAAAIKhI+py+0Po5yUFQA7\n'
但是,如果我在cStringIO中创建图像:
import cStringIO
import base64
import Image
tmp = cStringIO.StringIO()
img = Image.new('RGB', (16,9))
img.save(tmp, format='GIF', transparency=0)
base64.b64encode(tmp.getvalue())
# Response truncated for readability
# 'R0lGODdhEAAJAIcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMAAGYAAJkAAMwAAP8AA...
此第二个代码段返回的值与第一个代码段不同且长得多。
为什么我的返回值不同,我如何得到更短的(见第一个)base64值?
答案 0 :(得分:0)
这些图像表示之间的区别在于格式,因为您的第一个字符串是89a
格式的gif,而您的tmp是87a
。
>>> 'R0lGODlh'.decode('base64')
'GIF89a'
>>> 'R0lGODdh'.decode('base64')
'GIF87a'
关于我发现的主题的唯一相关讨论是:GIF89A and PIL,因此PIL似乎可以加载89a
格式,但不能自己创建。
答案 1 :(得分:0)
正如@delnan指出的那样,我没有使用等效的图像。
但是,在我的搜索中,我发现png
图像返回的base64字符串比gif
图片短。
更接近从photoshop中制作的gif重新调整的内容。