
Base64 是一种二进制转文本的编码 *** ,用于以 ASCII 字符串格式表示二进制数据。它常用于对以文本为主的介质(例如电子邮件、基于 *** ON 的 API 等)进行数据编码,以确保图像和文件等二进制数据不会损坏。Base64 一词源于它使用 64 个字符(A-Z、a-z、0-9、+ 和 /)来表示数据。近年来,Base64 已广泛应用于多模态 AI 应用、嵌入式系统、云服务和 Web 开发。在本文中,我们将深入了解 Base64 及其使用 *** 。
Base64 主要用于需要将二进制数据(例如图像、视频、模型权重等)在基于文本的基础架构中传输且不被篡改或损坏的情况。但为什么它在众多其他类型的编码中如此受欢迎呢?让我们来一探究竟。
Base64 具有以下特点:
以下是其他著名编码与 Base64 的比较。
| 编码 | 目的 | 使用案例 | 大小影响 |
|---|---|---|---|
| Base64 | 二进制转文本 | 在 HTML、 *** ON 等中嵌入图像/文件 | 大约增加 33% |
| Hex | 二进制转十六进制 | 调试、 *** 追踪 | 大约增加 100% |
| Gzip | 压缩 | 文本/二进制的实际大小减少 | 视压缩比而定 |
现在让我们尝试理解 Base64 的工作原理。以下是将字符串“Hello”转换为 Base64 格式的分步演示。
| 字符 | ASCII 十进制值 | 二进制值(8 位) |
| H | 72 | 01001000 |
| e | 101 | 01100101 |
| l | 108 | 01101100 |
| l | 108 | 01101100 |
| o | 111 | 01101111 |
所以现在,我们的字符串“Hello”看起来应该是 01001000 01100101 01101100 01101100 01101111。
也就是 5 个字符 × 8 位 = 40 位。
Base64 以 6 位为单位进行操作,因此我们将这 40 位数据分组为 6 位数据块,而之前是 8 位数据块:
01001000 01100101 01101100 01101100 01101111
当这些 8 位数据块被拆分成 6 位数据块时,结果如下:
010010 000110 010101 101100 011011 000110 1111
由于 40 不能被 6 整除,因此我们需要在末尾填充一些 0。现在我们有 6 个完整的 6 位数据块和 1 个剩余的 4 位数据块。我们在最后一个块中填充 2 个零位,使其成为一个完整的 6 位数据块:
010010 000110 010101 101100 011011 000110 111100
我们知道 2^6 等于 64。因此,我们的范围在 0 到 63 之间。
| 6位二进制 | 十进制 |
| 010010 | 18 |
| 000110 | 6 |
| 010101 | 21 |
| 101100 | 44 |
| 011011 | 27 |
| 000110 | 6 |
| 111100 | 60 |
按照标准 Base64 字符表,我们将十进制值映射到相应的字符。

Source –
| 十进制 | Base64 字符 |
| 18 | S |
| 6 | G |
| 21 | V |
| 44 | s |
| 27 | b |
| 6 | G |
| 60 | 8 |
我们得到的字符串“Hello”的 Base64 编码结果为“SGV *** G8”。
由于原始字符串有 5 个字节(不是 3 的倍数),Base64 需要使用“=”进行填充,使输出长度成为 4 个字符的倍数。
5 个字节 = 40 位 -> 6 个完整的 Base64 字符 + 2 个字符(来自填充位)-> 总共 8 个字符
最终的 Base64 编码字符串:“Hello” -> SGV *** G8=
现在您已经了解了 Base64 的工作原理,接下来我将向您展示如何在 Python 中实现它。我们将首先尝试对一些文本进行编码和解码,然后对图像进行同样的操作。
让我们使用 Base64 对这段简单的文本进行编码,然后将编码后的字符串解码回其原始形式。
import base64
# Text encoding
message = "Hello World"
encoded = base64.b64encode(message.encode())
print("Encoded:", encoded)
# Decoding it back
decoded = base64.b64decode(encoded).decode()
print("Decoded:", decoded)
输出:

在视觉相关的应用中,尤其是在使用视觉语言模型 (VLM) 时,图像通常在以下情况下使用 Base64 编码:
以下是一段简单的 Python 图像编码和解码代码。
from PIL import Image
import base64
import io
# Load and encode image
img = Image.open("example.jpeg")
buffered = io.BytesIO()
img.save(buffered, format="JPEG")
img_bytes = buffered.getvalue()
img_base64 = base64.b64encode(img_bytes).decode('utf-8')
print("Base64 string:", img_base64[:100], "...") # Truncated
输出

我们还可以使用以下代码将 base64 编码的数据解码回图像。
from PIL import Image import base64 import io from IPython.display import display, Image as IPythonImage # Assume `img_base64` is the base64 string img_data = base64.b64decode(img_base64) img = Image.open(io.BytesIO(img_data)) display(IPythonImage(data=img_data))
输出

要了解有关 Base64 的更多信息并查找更多编码器和解码器,您可以参考。
尽管 Base64 在跨领域的各种用例中都非常有用,但在使用它时仍需注意以下几点。
在这个模型既能“看”又能“读”的时代,Base64 已悄然成为多模态系统的基石。它在数据编码中扮演着至关重要的角色,弥合了二进制数据和纯文本系统之间的鸿沟。在视觉语言工作流程中,Base64 标准化了图像从移动客户端到云端 GPU 的传输方式,同时保持了可重复性并简化了集成。
使图像与基于文本的基础设施兼容一直是一个复杂的难题。Base64 编码为此提供了一个实用的解决方案,它支持通过 API 传输图像,并打包数据集用于训练。
宝塔面板另外一个特质是,你无需通过Linux命令行来查看服务器各项指标状况,即可以阿里云服务器类似的可视化图表,查看资源使用、负载、CPU占用及内容使用百分比等指标。 默认监控是关闭,有需要的,可以开启,监控数据默认保存30天,可以自行修改,默认监控数据保存在日志,可手动清理该日志。 监控管理,...
宝塔面板提供丰富的软件以一键安装,这让服务器环境搭建提供不少的便利性,站长可以根据实际需求快速编译安装以实现不同的功能需求。 软件管理,主要是宝塔提供的一些面板扩展插件。 Nginx Nginx是一个高性能的HTTP和反向代理服务器,具有轻量级、占用内存小,并发能力强等优势。 w...
宝塔面板的计划任务,主要用于安排和管理需要定时执行的任务,如备份、内存清理等。其实对于大部分站长来说,主要使用该板块的备份网站、备份数据库及释放内存的三个定时任务计划。 Shell脚本的添加 输入任务名称,选择执行周期,输入执行的脚本内容。 注意事项: 输入脚本内容...
对于初学者和那些刚刚进入WordPress开发的人来说,PHP是您可以开始的最佳起点之一。这是一种超级简单直接的语言,使其成为之一,因此相当容易上手,它构成了在线开发的支柱。另外,如果你想在WordPress后端工作,你肯定需要学习它。 但是,如果您不想在昂贵的大学课程上花费数月或数年时间怎么...
Laravel多年来一直是PHP应用程序开发的摇滚明星,这是有充分理由的。庞大的生态系统、活跃的社区、强大的就业市场、成功的初创公司——它拥有一切让采用新技术变得值得的东西。 如果你想学习Laravel,你不需要更进一步。通过浏览本指南,您可以找到最适合您的Laravel教程,与您的知识水平和...
PHP开发:有些人认为它是,另一些人认为它是一种过时的技术,不值得花时间学习。但是这些数字说明了什么,尤其是当您查看PHP开发人员的薪水时? 虽然肯定有许多更新、更炫、更令人兴奋的语言,但PHP仍然是后端Web开发的可靠主食,也是许多雇主仍在寻找的技能。 有兴趣自己成为PHP开发人员吗?我们...