import requests
from PIL import Image
url_shoes_for_choice = [
"https://content.adidas.co.in/static/Product-CM7531/Unisex_OUTDOOR_SANDALS_CM7531_1.jpg",
"https://cdn.shopify.com/s/files/1/0080/1374/2161/products/product-image-897958210_640x.jpg?v=1571713841",
"https://cdn.chamaripashoes.com/media/catalog/product/cache/9/image/9df78eab33525d08d6e5fb8d27136e95/1/_/1_8_3.jpg",
"https://ae01.alicdn.com/kf/HTB1EyKjaI_vK1Rjy0Foq6xIxVXah.jpg_q50.jpg",
"https://www.converse.com/dw/image/v2/BCZC_PRD/on/demandware.static/-/Sites-cnv-master-catalog/default/dwb9eb8c43/images/a_107/167708C_A_107X1.jpg"
]
def img():
for url in url_shoes_for_choice:
image = requests.get(url, stream=True).raw
out = Image.open(image)
out.save('image/image.jpg', 'jpg')
if __name__=="__main__":
img()错误:
OSError: cannot identify image file <_io.BytesIO object at 0x7fa185c52d58>发布于 2020-06-19 20:44:15
问题是,其中一个图像是对requests.get(url, stream=True).raw返回的字节数据产生问题,我不确定,但我想第三个图像的数据是无效的字节数据,所以我们可以不获取原始数据,而是只获取内容,然后使用BytesIO可以修复字节数据。
我从你的原始代码中又修正了一件事,我把编号添加到你的图像中,这样每个图像都可以用不同的名字保存。
from io import BytesIO
def img():
for count, url in enumerate(url_shoes_for_choice):
image = requests.get(url, stream=True)
with BytesIO(image.content) as f:
with Image.open(f) as out:
# out.show() # See the images
out.save('image/image{}.jpg'.format(count))(虽然这很好,但我不知道主要问题是什么。如果有人确切知道是什么问题,请评论并解释。)
发布于 2020-06-19 20:03:41
我打开浏览器中的第一个链接并保存了图像。它实际上是一个webp文件。
$ file Unisex_OUTDOOR_SANDALS_CM7531_1.webp
Unisex_OUTDOOR_SANDALS_CM7531_1.webp: RIFF (little-endian) data, Web/P image, VP8 encoding, 500x500, Scaling: [none]x[none], YUV color, decoders should clamp您可以显式地告诉映像库,它应该需要一个jpg。当您删除该参数并让它使用out.save('image/image.jpg')自行计算出来时,第一个映像将成功地为我下载。
如果确保将每个图像保存在不同的名称下,则前两个图像是这样工作的:
def img():
i = 0
for url in url_shoes_for_choice:
i+=1
image = requests.get(url, stream=True).raw
out = Image.open(image)
out.save('image{}.jpg'.format(i))第三个文件是一个有效的jpeg文件,也是第四个文件,但是使用了我第一次听到的JFIF standard 1.01。我很肯定你会发现支持不同的文件类型。
值得注意的是,如果我下载chrome中的图像并打开那些带有python的图片,没有什么会失败的。所以chrome可能会向文件中添加信息。
PIL/pillow的文档解释了这里,您需要一个适合动画图像的新版本,但这不是您的问题。
只有当系统WebP库为v0.5.0或更高版本时,才能启用对动画WebP文件的支持。您可以通过调用features.check(“webp_anim”)在运行时检查webp动画支持。
https://stackoverflow.com/questions/62477698
复制相似问题