python-3.x PIL.UnidentifiedImageError:无法识别图像文件

inn6fuwd  于 2023-03-20  发布在  Python
关注(0)|答案(4)|浏览(1083)

我正在开发GCP云函数,打算编写一个合并两个图像的函数。但是,当我调用该函数时,得到了以下错误:
追溯(最近调用最后调用):文件“/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py“,第346行,在运行_http_function结果= _函数处理程序。调用_用户_函数中文件“/env/local/lib/python3.7/站点包/谷歌/云/函数/工作者. py”,第217行,在调用用户函数中返回调用用户函数(请求或事件)文件“/env/local/lib/python3.7/站点包/谷歌/云/函数/工作者. py”,第210行,在call_user_function中返回自身。_user_function(request_or_event)文件“/用户代码/main.py“,第74行,在执行newIntro= generateIntroImage中(名称Map[“标准名称”],名称Map[“标准图片”],名称Map[“徽标”],名称Map[“标准年份”],名称Map[“字体”])文件“/user_code/main.py”,第12行,在generateIntroImage images.append(Image.open(徽标))文件“/env/local/lib/python3.7/site-packages/PIL/Image.py“中,第2862行,在打开中“无法识别映像文件%r”%(如果文件名为fp,则为文件名)PIL.UnidentifiedImageError:无法识别图像文件“/”
我在本地机器上运行了这个函数,它按预期工作,但是当我在GCP上部署它时,它给出了这个错误并崩溃。

from PIL import Image
from PIL import ImageFont
from PIL import ImageDraw

def generateIntroImage(stdName, stdPicture, logo, year, typeFace):
    images = [Image.open(x) for x in [stdPicture, logo]]
    widths, heights = zip(*(i.size for i in images))
    total_width = sum(widths)
    max_height = max(heights)
    new_im = Image.new('RGB', (total_width, max_height))
    x_offset = 0
    for im in images:
        new_im.paste(im, (x_offset,0))
        x_offset += im.size[0]

    font= ImageFont.truetype(typeFace, 70)
    draw= ImageDraw.Draw(new_im)
    draw.text((0, 0), stdName+"'s " +year+" Year Book", (0,0,0),font= font)
    fileName= "/tmp/test.jpg"
    new_im.save(fileName)
    return fileName

这些图像是.jpg和.png文件。知道可能出了什么问题吗?

xkrw2x1b

xkrw2x1b1#

发生在我身上的谷歌Colab以及,显然更新PIL版本修复了我的问题。

vof42yt1

vof42yt12#

PIL抛出错误,因为它无法 * 识别 * 图像格式。最可能的原因是图像已损坏,因此无法通过pillow的Image.open()读取(或“识别”)。例如,如果您尝试在IPython提示符下打开图像,它也会失败。

In [2]: from PIL import Image
In [3]: Image.open("176678612.jpg")
---------------------------------------------------------------------------
UnidentifiedImageError                    Traceback (most recent call last)
<ipython-input-3-3f91b2f4e49a> in <module>
----> 1 Image.open("176678612.jpg")

/opt/conda/envs/swin/lib/python3.7/site-packages/PIL/Image.py in open(fp, mode, formats)
   3022         warnings.warn(message)
   3023     raise UnidentifiedImageError(
-> 3024         "cannot identify image file %r" % (filename if filename else fp)
   3025     )
   3026 

UnidentifiedImageError: cannot identify image file '176678612.jpg'

处理此检查的相关代码段来自PIL.Image.open()

"""
exception PIL.UnidentifiedImageError: If the image cannot be opened and
       identified.
"""

raise UnidentifiedImageError(
        "cannot identify image file %r" % (filename if filename else fp)

因此,修复方法是删除映像,或者用未损坏的版本替换它。

rqqzpn5f

rqqzpn5f3#

网址=“https://github.com/repo/folder/inner_folder/branch/img.jpg?raw=true“
在url的末尾给予“?raw=true”
对我很有效

yfwxisqw

yfwxisqw4#

你需要提供一个到图像的可下载链接。对我起作用的是点击下载图像并复制那个网址。

相关问题