为什么python base64返回值不同:open(),StringIO()?

时间:2013-11-23 15:12:40

标签: python base64 python-imaging-library

导入图像时,我收到的值与创建图像时的值不同。如果我导入图像

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值?

2 个答案:

答案 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重新调整的内容。