Skip to content

OSError: [Errno 24] Too many open files for image.save for tiff images #5936

@gooseillo

Description

@gooseillo

What did you do?
I am opening a large number of jpg and tiff (single page & multi page) images, resizing them and saving them in a new directory. I am running this code within VS code in jupyter notebook using PIL 9.0.0

    def change_image_res(rep_image, 
                        new_path,
                        max_image_thresh=49, 
                        percent_reduce_res = [0.1, 0.2, 0.3, 0.4, 0.5]):

    image_name = rep_image.name
    save_all = True if rep_image.suffix == '.tiff' else False

    new_path = Path(new_path)

    with open(rep_image, "rb") as f:
        image = Image.open(f)
    
        if (image.size[0]*image.size[1])/1000000 > max_image_thresh:
            for res in percent_reduce_res:
                fixed_height = int(int((float(image.size[1]))) - (res * int((float(image.size[1])))))
                height_percent = (fixed_height / float(image.size[1]))
                width_size = int((float(image.size[0]) * float(height_percent)))
                if fixed_height*width_size/1000000 < 50:
                    image = image.resize((width_size, fixed_height), PIL.Image.NEAREST)
                    image.save(f'{new_path}\{image_name}', dpi=(300,300), save_all=save_all)
                    break
        else:
            image.save(f'{new_path}\{image_name}', dpi=(300,300), save_all=save_all)

What did you expect to happen?
I expected the images to be opened, processed, saved and closed automatically because of the context manager.

What actually happened?

After opening over a thousand images I get the following error

OSError: [Errno 24] Too many open files

I also notice that the python.exe instance builds up around 5GB ram. Restarting the Kernel releases the memory

I have tried every thing possible on the internet like temp copy, deep copy, using close(), using load() etc.
I have also tried every thing in this issue

#2760

Screenshot 2022-01-07 002627

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions