用requests获取到的图片的问题

我想请问一下,用requests.get(url).content获取到的图片保存到本地会跟直接在地址上下载有什么区别嘛?
我想把下载的图片整合到一个pdf里,我用过了网上的很多方法,img2pdf,PIF的方法,我发现就我用requests下载下来的图片不能够识别,要么报错(报错说我要进行的图片是无效的,但是我是能够打开的),要么pdf里显示是空白,而我用其他地址直接下载下来的图片就能够整和成pdf,这是什么原因啊?

以下答案引用自GPT-3大模型,请合理使用:

,谢谢!

我想可能是因为需要先进行图片格式的转换才能够正确地被识别。如果是网站上直接下载的图片,通常只要用open()和Image.open()就可以实现,但是用requests.get()获取文件的时候,因为从网站获取到的是二进制数据,前面一般会附带有MIME type头, 是一种用来识别文件类型的格式,这样你可以根据这个MIME type头有效地将二进制数据转换成真正的图片格式,然后再进行处理,方法可以这样:

# 先获取二进制数据和MIME type头
response = requests.get(url)
content_type = response.headers['Content-Type'] 
binary_data = response.content

# 根据MIME type头的类型来进行图片格式转换
from PIL import Image
from io import BytesIO
if 'image/png' in content_type:
 img = Image.open(BytesIO(binary_data)).convert('RGB')
elif 'image/jpeg' in content_type:
 img = Image.open(BytesIO(binary_data)).convert('RGB')
elif 'image/jpg' in content_type:
 img = Image.open(BytesIO(binary_data)).convert('RGB')

# 保存图片到本地
img.save('path_to_local.jpg')

如果我的回答解决了您的问题,请采纳我的回答

首先,你的url是不是纯图片地址,比如图片:http://pic.pdowncc.com/upload/2015-10/20151029174726875970.jpg用以下方式:

import requests as rq

head = {'User-Agent': 'ozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',}
url = r'http://pic.pdowncc.com/upload/2015-10/20151029174726875970.jpg'
s = rq.get(url, headers =head ).content
with open('test.png', 'wb') as f:    
    f.write(s)

结果如下:

img

如果不是纯图片,是只有图片的网页,则得到的content是二进制的网页数据

该回答引用ChatGPT
问题1

使用requests.get(url).content获取到的图片数据是二进制数据,需要将其保存为图片文件才能在本地查看,而直接在地址上下载则是将图片文件保存到本地。
一般来说,这两种方式保存的图片在内容上是完全一样的,即它们都包含了相同的像素数据和图片格式信息。但是,如果使用requests.get(url).content获取的图片数据在保存为图片文件时没有指定文件格式,而是使用默认的文件格式保存,那么在查看图片时可能会存在格式不兼容的问题。而直接在地址上下载的图片则不存在这个问题,因为其文件格式已经在服务器端确定,可以直接通过文件扩展名进行识别。
此外,使用requests.get(url).content获取的图片数据需要先进行网络请求,然后将图片数据传输到本地,而直接在地址上下载则直接从服务器上下载图片文件,速度更快,节省了请求时间和带宽资源。

问题2

可能是因为使用requests.get下载的图片并不包含文件格式信息(比如文件扩展名),导致无法正确地将图片转换为PDF文件。
在使用requests.get下载图片时,可以通过检查HTTP响应的Content-Type头部字段获取图片的MIME类型,并根据这个类型来判断图片的文件格式,从而给文件添加正确的扩展名。例如,对于JPEG格式的图片,MIME类型为image/jpeg,扩展名为.jpg或.jpeg;对于PNG格式的图片,MIME类型为image/png,扩展名为.png。具体的MIME类型可以在HTTP响应的Content-Type头部字段中找到。
如果无法获取到图片的MIME类型,可以尝试手动指定图片的扩展名,例如将图片保存为image.jpg或image.png等。
另外,如果图片文件本身已经包含了正确的扩展名,那么可以直接使用这个扩展名来保存图片文件,并在将图片转换为PDF文件时使用正确的扩展名。

综上所述,要将使用requests.get下载的图片转换为PDF文件,需要确保图片包含正确的文件格式信息,或者手动指定图片的扩展名,并在将图片转换为PDF文件时使用正确的扩展名。