我正在开发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文件。知道可能出了什么问题吗?
4条答案
按热度按时间xkrw2x1b1#
发生在我身上的谷歌Colab以及,显然更新PIL版本修复了我的问题。
vof42yt12#
PIL抛出错误,因为它无法 * 识别 * 图像格式。最可能的原因是图像已损坏,因此无法通过pillow的
Image.open()
读取(或“识别”)。例如,如果您尝试在IPython提示符下打开图像,它也会失败。处理此检查的相关代码段来自
PIL.Image.open()
因此,修复方法是删除映像,或者用未损坏的版本替换它。
rqqzpn5f3#
网址=“https://github.com/repo/folder/inner_folder/branch/img.jpg?raw=true“
在url的末尾给予“?raw=true”
对我很有效
yfwxisqw4#
你需要提供一个到图像的可下载链接。对我起作用的是点击下载图像并复制那个网址。