Use pillow's context manager

This commit is contained in:
Simon Conseil
2023-07-15 15:30:28 +02:00
parent de597c576c
commit 3cf4f0979a
4 changed files with 25 additions and 22 deletions

View File

@@ -282,6 +282,7 @@ def get_iptc_data(filename):
def get_image_metadata(filename):
logger = logging.getLogger(__name__)
exif, iptc, size = {}, {}, {}
img = None
try:
img = _read_image(filename)
@@ -303,6 +304,9 @@ def get_image_metadata(filename):
size = get_size(img)
except Exception as e:
logger.warning("Could not read size from %s: %s", filename, e)
finally:
if img is not None:
img.close()
return {"exif": exif, "iptc": iptc, "size": size}

View File

@@ -86,9 +86,9 @@ def watermark(im, mark, position, opacity=1):
def add_watermark(img, settings=None):
logger = logging.getLogger(__name__)
logger.debug("Adding watermark to %r", img)
mark = Image.open(settings["watermark"])
position = settings.get("watermark_position", "scale")
opacity = settings.get("watermark_opacity", 1)
with Image.open(settings["watermark"]) as mark:
return watermark(img, mark, position, opacity)

View File

@@ -198,7 +198,7 @@ def generate_thumbnail(
logger.debug("Create thumbnail for video: %s", " ".join(cmd))
check_subprocess(cmd, source, outname)
if os.path.isfile(tmpfile) and black_retries > 0:
img = PILImage.open(tmpfile)
with PILImage.open(tmpfile) as img:
colors = img.getcolors(maxcolors=black_max_colors)
if colors is None:
# There were more colors than maxcolors in the image, it

View File

@@ -42,7 +42,7 @@ def test_process_image(tmpdir):
image = Image(TEST_IMAGE, ".", settings)
status = process_image(image)
assert status == Status.SUCCESS
im = PILImage.open(os.path.join(str(tmpdir), TEST_IMAGE))
with PILImage.open(os.path.join(str(tmpdir), TEST_IMAGE)) as im:
assert im.size == settings["img_size"]
@@ -56,7 +56,7 @@ def test_generate_image(tmpdir):
)
options = None if i == 0 else {"quality": 85}
generate_image(SRCFILE, dstfile, settings, options=options)
im = PILImage.open(dstfile)
with PILImage.open(dstfile) as im:
assert im.size == size
@@ -73,7 +73,7 @@ def test_generate_image_imgformat(tmpdir):
)
options = {"quality": 85}
generate_image(SRCFILE, dstfile, settings, options=options)
im = PILImage.open(dstfile)
with PILImage.open(dstfile) as im:
assert im.format == outfmt
@@ -89,8 +89,7 @@ def test_resize_image_portrait(tmpdir):
portrait_dst = str(tmpdir.join(portrait_image))
generate_image(portrait_src, portrait_dst, settings)
im = PILImage.open(portrait_dst)
with PILImage.open(portrait_dst) as im:
# In the default mode, PILKit resizes in a way to never make an image
# smaller than either of the lengths, the other is scaled accordingly.
# Hence we test that the shorter side has the smallest length.
@@ -103,7 +102,7 @@ def test_resize_image_portrait(tmpdir):
landscape_dst = str(tmpdir.join(landscape_image))
generate_image(landscape_src, landscape_dst, settings)
im = PILImage.open(landscape_dst)
with PILImage.open(landscape_dst) as im:
assert im.size[1] == 200
@@ -158,12 +157,12 @@ def test_generate_thumbnail(tmpdir, image, path, wide_size, high_size):
dstfile = str(tmpdir.join(image))
for size in [(200, 150), (150, 200)]:
generate_thumbnail(path, dstfile, size)
im = PILImage.open(dstfile)
with PILImage.open(dstfile) as im:
assert im.size == size
for size, thumb_size in [((200, 150), wide_size), ((150, 200), high_size)]:
generate_thumbnail(path, dstfile, size, fit=False)
im = PILImage.open(dstfile)
with PILImage.open(dstfile) as im:
assert im.size == thumb_size