如何将此(字节)字符串转换为 PILLOW 图像?
How do I convert this (byte)string to an PILLOW Image?
我通过 comm.socketServerScreenShot() 从 BizHawk-Emulator 获得了这个字节串。我知道它是 PNG 和十六进制编码的。所以我试着解码它(整个和拆分的字符串),但是有一些无效的十六进制数字(?)。
但如何将其转换为可用图像?
我还阅读了 this page 关于 PNG 的内容,我理解了其中的一些内容,但是,我不知道如何对字符串进行“反向十六进制转储”。
img 的 txt:HexImage.txt
您遇到的问题很可能是由于字符编码问题。如果将接收到的数据存储在变量中,Python 会将 \xNN
值解释为字符,因此在将它们保存到磁盘之前需要对其进行编码。
编码的选择会写入不同的数据。通常,您希望将数据存储为“utf-8”(Linux 中的标准格式和最便携的格式)或某种 windows 格式,例如“windows-1252”。不过,在这种特殊情况下,我们处理的不是文本或符号,而是原始数据。因此,上述两种编码都不会给出正确的、有效的输出。需要的是 raw_unicode_escape
,因为这将在不修改底层位模式的情况下对字符进行编码。
因此,要存储图像,我们需要这样的东西:
# Triple quote string, as it may contain both string markers ('")
img = """\x89PNG\r\n\x1a\n\x00\x00 ... \x00\x00\x00IEND\xaeB`\x82"""
with open("image.png", "wb") as f:
f.write(img.encode("raw_unicode_escape")
我在我的电脑上 运行 得到一张显示房子前面的小男人的图像。
我通过 comm.socketServerScreenShot() 从 BizHawk-Emulator 获得了这个字节串。我知道它是 PNG 和十六进制编码的。所以我试着解码它(整个和拆分的字符串),但是有一些无效的十六进制数字(?)。
但如何将其转换为可用图像?
我还阅读了 this page 关于 PNG 的内容,我理解了其中的一些内容,但是,我不知道如何对字符串进行“反向十六进制转储”。
img 的 txt:HexImage.txt
您遇到的问题很可能是由于字符编码问题。如果将接收到的数据存储在变量中,Python 会将 \xNN
值解释为字符,因此在将它们保存到磁盘之前需要对其进行编码。
编码的选择会写入不同的数据。通常,您希望将数据存储为“utf-8”(Linux 中的标准格式和最便携的格式)或某种 windows 格式,例如“windows-1252”。不过,在这种特殊情况下,我们处理的不是文本或符号,而是原始数据。因此,上述两种编码都不会给出正确的、有效的输出。需要的是 raw_unicode_escape
,因为这将在不修改底层位模式的情况下对字符进行编码。
因此,要存储图像,我们需要这样的东西:
# Triple quote string, as it may contain both string markers ('")
img = """\x89PNG\r\n\x1a\n\x00\x00 ... \x00\x00\x00IEND\xaeB`\x82"""
with open("image.png", "wb") as f:
f.write(img.encode("raw_unicode_escape")
我在我的电脑上 运行 得到一张显示房子前面的小男人的图像。