Muhammad Usama
Muhammad Usama

Reputation: 103

PIL.UnidentifiedImageError: cannot identify image file

I'm working on GCP cloud functions and intend to write a functions which combines two images. But I', getting the following error when I invoke the function:

Traceback (most recent call last): File "/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py", line 346, in run_http_function result = _function_handler.invoke_user_function(flask.request) File "/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py", line 217, in invoke_user_function return call_user_function(request_or_event) File "/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py", line 210, in call_user_function return self._user_function(request_or_event) File "/user_code/main.py", line 74, in execute newIntro= generateIntroImage(nameMappings['stdName'], nameMappings['stdPicture'], nameMappings['logo'], nameMappings['stdYear'], nameMappings['font']) File "/user_code/main.py", line 12, in generateIntroImage images.append(Image.open(logo)) File "/env/local/lib/python3.7/site-packages/PIL/Image.py", line 2862, in open "cannot identify image file %r" % (filename if filename else fp) PIL.UnidentifiedImageError: cannot identify image file '/tmp/logo.jpg'

I have ran this function on my local machine and it works as expected but when I deploy it on GCP, it gives this error and crashes. Here's my function:

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

These images are .jpg and .png files. Any idea what could be wrong?

Upvotes: 10

Views: 33302

Answers (4)

Pranav Y S
Pranav Y S

Reputation: 9

url = "https://github.com/repo/folder/inner_folder/branch/img.jpg?raw=true"

give "?raw=true" at the end of url

It worked for me

Upvotes: 0

kmario23
kmario23

Reputation: 61375

PIL throws error because it cannot identify the image format. Most probably the reason is that the image is corrupted and hence cannot be read (or "identified") by pillow's Image.open(). For example if you try opening the image in an IPython prompt, it would fail as well.

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'

And the relevant piece of code handling this check is from 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)


So, the fix is to delete the image, or replace it with an uncorrupted version.

Upvotes: 4

Shiva Reddy
Shiva Reddy

Reputation: 37

you need to provide a downloadable link to the image. What worked for me was click on the download image and the copy that URL.

Upvotes: -2

Jjang
Jjang

Reputation: 11444

Happened to me on Google Colab as well, apparently updating PIL version fixed the problem for me.

Upvotes: 8

Related Questions