-
-
Notifications
You must be signed in to change notification settings - Fork 2.4k
Closed
Labels
Description
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
