如何用Python将图片转换为Base64字符串

2,319 阅读4分钟

Base64编码使我们能够将包含二进制或文本数据的字节转换成ASCII字符。通过对数据进行编码,我们可以提高数据被各种系统正确处理的机会。有些系统不能理解字节格式的数据,所以我们必须转换数据。

Python 中 base64.b64encode() 方法的目的是将二进制数据转换成 ASCII 安全的 "文本"。 但是Python坚决不同意这一点。Python现在对此非常严格,byte.encode()方法甚至不存在,所以'xyz'.encode('base64') 会引发一个AttributeError

现在,让我们了解一下base64编码。

什么是Base64编码?

Base64编码是将字节转换为ASCII字符的类型。在数学中,一个数字系统的基数表示有多少个不同的字符代表数字。

Base64编码的名称直接来自于基数的数学定义:我们有64个字符来代表数字。

Base64字符集包含以下内容:

  1. 26个大写字母
  2. 26个小写字母
  3. 10个数字
  4. 用于新行的+和/

当计算机将Base64字符转换为二进制时,每个Base64字符代表6比特的信息。

Python将图像转换成Base64字符串

要在Python 图像转换为Base64 字符串 ,请使用Python base64模块,它提供了b64encode()方法。Python base64.b64encode()函数使用Base64对一个字符串进行编码,并返回该字符串。

语法

base64.b64encode(s[, altchars])

参数

该函数将s作为输入,是必需的参数。

可选的altchars必须是一个至少长度为2的字符串(其他字符被忽略),它定义了+和/字符的替代字母。

这使得一个应用程序能够,例如,生成URL或文件系统安全的Base64字符串。默认值是None,使用标准的Base64字母表。

返回值

b64encode()函数返回编码后的字符串。

在Python中把图像转换为base64的例子

import base64

with open("grayimage.png", "rb") as img_file:
    b64_string = base64.b64encode(img_file.read())
print(b64_string)

在我的项目文件夹中,我有一张名为grayimage.png 的图片**。** 请确保你的图像路径是正确的。

在这个例子中,我们首先以'**rb'**模式打开文件。然后我们读取图像文件。

Python用open()函数打开了一个文件,然后我们可以执行我们想要的任何操作。当我们不再需要该文件时,它会自动关闭该文件。

然后用b64encode()方法对其进行编码。 你必须在编码前读取一个图像文件。

我在终端的输出中得到了长字符串,如下所示:

xrfaP11Zcs/PROUWCp7bOF7TZsPuAxAvWmY0EkyUZ+IF49r3aOEYbllIVB7mWkgXr88st9aZVx5+5jE+ihdEZZFSaVUmJZhGNmVQzOxX7mrT//r2OHpHoQEO+G55O0Hv+kfpBajTeivkc/WbnmWbY6n3T/zZ9TNwTzABCh5vgjOBdpHR4ygIiFXn+s3AHjobVWNQ5BHKVPFwOdFUoozxugdQNpc+CJTX2Vih83Z7xT3FEYNPpMMh/1ff0Ygx350gyQmqaBwfRCPzWcGHlMTDsYx3O2qwx9KNj8dHzcOCM9eGNMYJMDXVZ1veCs2TNawDhiVeUT04hoktMLlgnEK9n1oBMsGfdHK5rQ013Xn7Tjr7xOiv+EHHl2Mhy78TjVRliEQNR3lCxXiAw99GKqVwLW4VUzNWs7EVklYilBVaibIT519HHn1Da9NwpDEJj3YtS7QlqLtcHOLKH9OSgzN5yym/OP5TcR667/Hub1V/H89Rry0LVMN7yXFg+7kUid8u1ohpBD7cfa4UPbLYCGZRJS+dS6Xz4+//ap6f+mP53Pa1lUp/58GQH2dIKQ0aHTYDy+LA71dxBi/+yFOVQ76AIHqckWXrgP214WqvJVcxTB4MDKdT2khKF+v5IU9xja0HDTNye/sQ5xvn79XxvtLlCR88lzfDwi6iZj6I+bAkX7DdCznwJ/YH7Evq/b2FtcdXiUVWj10MP4zQO36+QlKc7giHVKfFhypPnyePuLDocQ9o+4bmakPoCFbbz0MT4t7Cg0AkdD29ReLFvgt6kJx34zDUxTMQuRNReLDyM4rbfYsmi7VnCZHLCHuBo0GPcWpp8TlV+9dzt0/503E75OPBtMw8fmSTnAhB/+mXbJV7sq4pRoiBUwQ+deHLveogF4KMDWKPhS3lLPSc2bJxZmn4+gG98yL0eMd9FVU7DZaWM5ASv5tifdfP/2opstI1N8PsSdQYFXc+o/wIB7Eemf89oBmy0eZLx07Wx3tV31Do7vCXTPWfq5KoeBEj96+ae9NGrnnn3bhE3+/r+mykBKrcDYBpMY4eFQDzvKT7tF5QZF02CDacTc5lHqk23K40fH6dK7HnQ+hWw8X/4/RiMehs7bRiTnZ/sfeRHMiB+XXnBIv/Izftgq0urkSsnX829z5Ekzcf6lUyP32TcyTg38BLqTsL/d/FtLw5IRMadrrYr99/p2Gs6rbGrGT/ikQnOhVNnLimbbxVLeFS8tdmjVOE0wcmkOvu5nF3/apPPxXgEapMdnaqiKGbilvzadZFg503N+Pjyf/UNvhu7oXayGXKPg/F/zbZ6b0Oelqt2f/bgOULOh4mSezS55a4pPLYdFCYi0sLtb3nwukE6J20uCqAfvretNh0+xyFpHt6j/+waFfxcDxzR1s4vY1DdGTn/GVld9rr2Udrf6pN4He6cMWQsw2Ow9fwzl6Og/tk7ZxVa/+h/+9z++2j73iJyXQ+ac+nJy7tinATA6yXOP9RTl8rJbTI/p69m3lsjWkqaTAXj49XV3zil73n4Y4pP6vjHdavM7+vk7MiwuGEZRtJa0KTQeu72y2EICg9k83B7KAcGB9CVAZf8iiK9mxee7P3Qao3L+r/p3DYiXJ8t/SqtghnnP0sZQvr+bUtJtDpo9TAJUELKS0Es3aPJ6nxVHuuwzt9pkynpqfqxcs4uncJBN0zcpMLrofEGBRWz2HNXO0J57woQfpXc1GHd1vTN4T2c8JtwBhjJC7pB7tn2MJ0/lpf+QWuCzMoUGMupPsAIj1x7y+ViO2aFxlP3qH+LLZJcv++B0kzYwmag38ljr9vudS2ZuKec3utBQ4E/PZLSRViNSnP3CSep/KhS1HWWKerK3xvL/Hzydrveh+QnLAAAAAElFTkSuQmCC'

你的字符串已经被打印出来了。但是在你的base64字符串的起始位置,有一个b'。

或者你可以说你的base64编码的字符串是在一对单引号中。

要从Python中base64代码的前缀中去掉b',你可以使用string.encode('utf-8')方法。

import base64

with open("grayimage.png", "rb") as img_file:
    b64_string = base64.b64encode(img_file.read())
print(b64_string.decode('utf-8'))

就这样了。