我真的很困惑我遇到的一个问题。我有一个脚本从imgur下载图像文件。该脚本利用了请求模块。本质上,请求将链接打开为字节流,然后将文件下载到块中并放入内存缓冲区中。这是我所做的一个非常简单的版本:
page_binary_string = io.BytesIO
response = requests.get(url, stream=True)
for chunk in response.iter_content(CHUNK_SIZE, decode_unicode):
page_binary_string.write(chunk)
在这种情况下,decode_unicode将设置为false。然后,我使用
将结果流写入文件image_file = open(path, 'wb') # Open file for updating
image_file.write(page_binary_string.read(page_binary_string.size))
当我查看文件系统中的结果文件时,它是浏览器下载的文件大小的1/20 !!!
以下是我正在尝试的链接:http://i.imgur.com/VbauZys.jpg
如果您使用浏览器下载此文件,则可以看到它是244KB。当我查看磁盘上的文件时,它只有10KB。打开图像时,这种尺寸差异很明显。质量急剧恶化。
任何人都有任何想法为什么会发生这种情况以及如何解决这个问题? HTTP头(编码??)的东西是我的第一个猜测,但我并没有真正卖掉它。
答案 0 :(得分:1)
如果您没有使用io.ByteStream的具体原因,则可以使用请求模块自己的原始内容功能。看看这里http://docs.python-requests.org/en/latest/user/quickstart/#binary-response-content你可以这样做,或者你可以打开二进制模式的文件(open('somefile.jpg','wb'))并将内容转储到那里以便快速和脏东西。
答案 1 :(得分:0)
我想要注意。我正在改变下游的图像格式。上面的代码工作