11

如何在 Windows 上使用 python 将 png 图像编码为 base64?

iconfile = open("icon.png")
icondata = iconfile.read()
icondata = base64.b64encode(icondata)

以上在 Linux 和 OSX 中运行良好,但在 Windows 上它将编码前几个字符,然后缩短。为什么是这样?

4

2 回答 2

26

以二进制模式打开文件

open("icon.png", "rb")

我对 Windows 不是很熟悉,但我想发生的事情是文件包含一个字符 (0x1A),当它以文本模式打开时, Windows 将其解释为文件的结尾(出于遗留原因)。另一个问题是在 Windows 上以文本模式(不带“b”)打开文件会导致行尾被重写,这通常会破坏二进制文件,其中这些字符实际上并不表示行尾。

于 2009-03-10T19:29:26.880 回答
9

为了增加 Miles 的答案,PNG 文件中的前八个字节是专门设计的:

  • 89 - 第一个字节是一个检查位 8 没有被剥离
  • "PNG" - 让别人读到它是 PNG 格式
  • 0d 0a - DOS 行尾指示符,检查是否有 DOS->unix 转换
  • 1a - DOS 文件结束符,检查文件是否以二进制模式打开
  • 0a - unix 行尾字符,检查是否有 unix->DOS 转换

您的代码按照设计在 1a 处停止。

于 2009-03-10T22:16:13.953 回答