首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用base64对图像文件进行编码

使用base64对图像文件进行编码
EN

Stack Overflow用户
提问于 2010-09-15 15:24:49
回答 6查看 335.7K关注 0票数 207

我想使用base64模块将图像编码为字符串。不过,我遇到了一个问题。如何指定要编码的图像?我尝试使用图像的目录,但这只是导致对目录进行编码。我希望对实际的图像文件进行编码。

编辑

我尝试了这个代码片段:

代码语言:javascript
复制
with open("C:\Python26\seriph1.BMP", "rb") as f:
    data12 = f.read()
    UU = data12.encode("base64")
    UUU = base64.b64decode(UU)

    print UUU

    self.image = ImageTk.PhotoImage(Image.open(UUU))

但我得到以下错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "<string>", line 245, in run_nodebug
  File "C:\Python26\GUI1.2.9.py", line 473, in <module>
    app = simpleapp_tk(None)
  File "C:\Python26\GUI1.2.9.py", line 14, in __init__
    self.initialize()
  File "C:\Python26\GUI1.2.9.py", line 431, in initialize
    self.image = ImageTk.PhotoImage(Image.open(UUU))
  File "C:\Python26\lib\site-packages\PIL\Image.py", line 1952, in open
    fp = __builtin__.open(fp, "rb")
TypeError: file() argument 1 must be encoded string without NULL bytes, not str

我做错了什么?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-09-15 15:31:25

我不太明白你的问题。我假设您正在做的事情大致如下:

代码语言:javascript
复制
import base64

with open("yourfile.ext", "rb") as image_file:
    encoded_string = base64.b64encode(image_file.read())

当然,您必须首先打开文件并读取其内容--您不能简单地将路径传递给encode函数。

编辑:好的,这是您编辑完原始问题后的更新。

首先,记住在Windows上使用路径分隔符时使用原始字符串(字符串前缀为'r'),以防止意外命中转义字符。其次,PIL的Image.open要么接受文件名,要么接受类似文件的名称(即,对象必须提供读取、查找和告知方法)。

也就是说,您可以使用cStringIO从内存缓冲区创建这样一个对象:

代码语言:javascript
复制
import cStringIO
import PIL.Image

# assume data contains your decoded image
file_like = cStringIO.StringIO(data)

img = PIL.Image.open(file_like)
img.show()
票数 392
EN

Stack Overflow用户

发布于 2019-04-27 05:20:23

第一个答案将打印一个前缀为b‘的字符串。这意味着您的字符串将类似于b' your _ string‘要解决此问题,请添加以下代码行。

代码语言:javascript
复制
encoded_string= base64.b64encode(img_file.read())
print(encoded_string.decode('utf-8'))
票数 39
EN

Stack Overflow用户

发布于 2019-09-19 14:55:24

代码语言:javascript
复制
import base64
from PIL import Image
from io import BytesIO

with open("image.jpg", "rb") as image_file:
    data = base64.b64encode(image_file.read())

im = Image.open(BytesIO(base64.b64decode(data)))
im.save('image1.png', 'PNG')
票数 31
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3715493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档