首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只下载了5中的一个图像,就会产生一个错误。

只下载了5中的一个图像,就会产生一个错误。
EN

Stack Overflow用户
提问于 2020-06-19 19:56:37
回答 2查看 94关注 0票数 2
代码语言:javascript
复制
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()

错误:

代码语言:javascript
复制
OSError: cannot identify image file <_io.BytesIO object at 0x7fa185c52d58>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-19 20:44:15

问题是,其中一个图像是对requests.get(url, stream=True).raw返回的字节数据产生问题,我不确定,但我想第三个图像的数据是无效的字节数据,所以我们可以不获取原始数据,而是只获取内容,然后使用BytesIO可以修复字节数据。

我从你的原始代码中又修正了一件事,我把编号添加到你的图像中,这样每个图像都可以用不同的名字保存。

代码语言:javascript
复制
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))

(虽然这很好,但我不知道主要问题是什么。如果有人确切知道是什么问题,请评论并解释。)

票数 1
EN

Stack Overflow用户

发布于 2020-06-19 20:03:41

我打开浏览器中的第一个链接并保存了图像。它实际上是一个webp文件。

代码语言:javascript
复制
$ 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')自行计算出来时,第一个映像将成功地为我下载。

如果确保将每个图像保存在不同的名称下,则前两个图像是这样工作的:

代码语言:javascript
复制
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动画支持。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62477698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档