首页 > 解决方案 > 如何将此(字节)字符串转换为枕头图像?

问题描述

我通过 comm.socketServerScreenShot() 从 BizHawk-Emulator 获得了这个字节串。我知道它是 PNG 和十六进制编码的。所以我试图解码它(整个和分割的字符串),但是有一些无效的十六进制数字(?)。
但是如何将其转换为可用的图像?

我还阅读了有关 PNG 的此页面,并且我了解其中的一些内容,但是,我不知道如何对字符串进行“反向十六进制转储”。

img的一个txt:HexImage.txt

标签: pythonhexpngdecode

解决方案


您面临的问题很可能是由于字符编码问题。如果将接收到的数据存储在变量中,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")

我在我的电脑上运行了这个程序,得到了一张显示一个小男人在房子前面的图像。


推荐阅读