当前位置: 首页 > 知识库问答 >
问题:

Python将二进制图像(PNG)数据写入文件[重复]

白通
2023-03-14

我使用请求模块连接到返回PNG图像的php脚本。如果我这样做:

import requests
r=requests.get("http://location/script.php", cookies=cookies)
fp = open("image.png", "wb")
fp.write(r.text) #r.text is the binary data for the PNG returned by that php script
fp.close()

但是它在编写时给出了UnicodeEncodeError,所以我使用了fp.write(r.text.encode(utf-8))而不是fp.write(r.text)。文件已创建,但我无法在图像查看器中查看它(它会出错)。但是,如果我右键单击并在Firefox中保存该脚本返回的PNG,我可以在保存后在同一图像查看器中查看它。所以我猜我将图像数据写入文件的方式有问题。还有别的办法吗?

共有1个答案

谭嘉歆
2023-03-14

r.text不是二进制数据。该属性为您提供解码文本,即Unicode值。

您可能希望改用r.content,或者将图像流式传输到文件设置stream=True,并从r.raw文件对象进行复制。

 类似资料:
  • 问题内容: 我有23位表示为字符串,并且需要将此字符串作为4个字节写入二进制文件。最后一个字节始终为0。以下代码有效(Python 3.3),但感觉不太好(我对Python和编程很陌生)。您有任何改善技巧吗?似乎for循环可能有用,但是如何在循环中进行切片而不出现IndexError?请注意,当我将位提取到一个字节中时,我会反转位顺序。 问题答案: 您可以将其视为int,然后按以下方式创建4个字节

  • 我想以这种形式将短int x=0x4740写入二进制文件:0100 0000 0100 0111,当我在记事本中打开它时,它是@G。它正在工作。当我尝试编写例如短int a=0xf0ff;(二进制:1111 0000 1111 1111)时,记事本显示给我的不是我的数字二进制(➕是1100 1011 1001 1001 1100 0100 1001 0001)。如何在这个文件中编写它并获得1111

  • 问题内容: 我需要将文件的大小写入二进制文件。例如: 与其将“ 68187”字符串写入out.bin,我想将168187的4字节int表示形式写入out.bin。 如何将“ 68187”转换为4字节整数? 问题答案: 这是我能想到的: 现在,根据字节顺序,您可能需要交换字节顺序: 示例(已解码,因此可见): 这用于 无符号的 int,如果int是有 符号的并且 值是 负数 ,则必须计算两者的补数。

  • 问题内容: 有什么方法可以将图像转换为javascript中的二进制数据,反之亦然。 问题答案: 我想用JavaScript获取图像数据?回答您的问题: 将标签传递给此功能。它将以base64编码返回图像。但是它将被重新编码。因此,您无法访问原始图像数据。

  • 问题内容: 在python 2.x中,我可以这样做: 但是现在,我得到了。我应该使用一些秘密编码吗? 问题答案: 更好的方法:

  • 我无法重写从二进制缓冲区获取的文件,我已与原始文件进行了检查,所有字节都相同。 这是从NodeJS创建的文件: 这是最初的一个: 你可以比较这两个文件,每个字节都是一样的,我猜NodeJS的编码不是正确的。 这是一段代码 你可以试着在你的节点上运行它,看看结果是错误的。 我能做些什么来修复它?