storing a PILLOW image in same name after editing

Question:

I want to crop a set of Pillow images and save it with the same name in the same folder, from where it is opened. It is clustered and stored into 4 groups.

I wrote the code as below.

for c in range(4):
    for image_file in glob.glob(f"plot_images/{c}/*.jpg"):
        im=Image.open(image_file)
        im = im.convert("RGB")
        im = im.crop(offset)
        im.save(im.filename)

It gives me the error

AttributeError                            Traceback (most recent call last)
<ipython-input-24-9f3d3a38e4e4> in <module>
     15         im = im.crop(offset)
     16         #im.show()
---> 17         im.save(im.filename)
     18         #print(c,end='r')
     19 

/srv/conda/envs/notebook/lib/python3.8/site-packages/PIL/Image.py in __getattr__(self, name)
    539             )
    540             return self._category
--> 541         raise AttributeError(name)
    542 
    543     @property

AttributeError: filename

I don’t understand why the error comes. please help.

Asked By: aparnadeepak101

||

Answers:

If you check type(im) in different moments then you should see PIL.JpegImagePlugin.JpegImageFile after loading but PIL.Image.Image after converting which don’t have filename. Use image_file instead of im.filename

im.save(image_file)

im = Image.open(image_file)
print(type(im)) # <class 'PIL.JpegImagePlugin.JpegImageFile'>

im = im.convert("RGB")
print(type(im)) # <class 'PIL.Image.Image'>

im = im.crop(offset)    
print(type(im)) # <class 'PIL.Image.Image'>

im.save(image_file)
Answered By: furas