Fix saving as .heic

pull/12384/head
Matt Westcott 2024-10-17 23:28:31 +01:00
rodzic 92567f6203
commit 15abe65eb4
3 zmienionych plików z 26 dodań i 3 usunięć

Wyświetl plik

@ -409,7 +409,7 @@ class WebPQualityOperation(FilterOperation):
class FormatOperation(FilterOperation):
supported_formats = ["jpeg", "png", "gif", "webp", "avif", "ico"]
supported_formats = ["jpeg", "png", "gif", "webp", "avif", "ico", "heic"]
def construct(self, format, *options):
self.format = format

Wyświetl plik

@ -1071,12 +1071,12 @@ class Filter:
"output-format-options" in env
and "lossless" in env["output-format-options"]
):
return willow.save_as_heif(output, lossless=True)
return willow.save_as_heic(output, lossless=True)
elif "heic-quality" in env:
quality = env["heic-quality"]
else:
quality = getattr(settings, "WAGTAILIMAGES_HEIC_QUALITY", 80)
return willow.save_as_heif(output, quality=quality)
return willow.save_as_heic(output, quality=quality)
elif output_format == "svg":
return willow.save_as_svg(output)
elif output_format == "ico":

Wyświetl plik

@ -719,6 +719,29 @@ class TestFormatFilter(TestCase):
# quality=80 is default for the Willow and PIL libraries
save.assert_called_with(f, "WEBP", quality=80, lossless=True)
def test_heic(self):
fil = Filter(spec="width-400|format-heic")
image = Image.objects.create(
title="Test image",
file=get_test_image_file(),
)
out = fil.run(image, BytesIO())
self.assertEqual(out.format_name, "heic")
def test_heic_lossless(self):
fil = Filter(spec="width-400|format-heic-lossless")
image = Image.objects.create(
title="Test image",
file=get_test_image_file(),
)
f = BytesIO()
with patch("PIL.Image.Image.save") as save:
fil.run(image, f)
save.assert_called_with(f, "HEIF", quality=-1, chroma=444)
def test_invalid(self):
fil = Filter(spec="width-400|format-foo")
image = Image.objects.create(