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

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

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

有帮助吗?

解决方案

以二进制模式打开文件

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

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

其他提示

为了补充迈尔斯的答案, PNG 文件中的前八个字节 是专门设计的:

  • 89-第一个字节是一张检查位8尚未剥离的支票
  • “ PNG” - 让某人读到这是PNG格式
  • 0d 0a- DOS结束指示器,检查是否有DOS-> UNIX转换
  • 1A-文件末端字符,以检查文件是否在二进制模式下打开
  • 0A- UNIX线的字符,检查是否存在Unix-> DOS转换

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top