Accept HEIC image format labels

This commit is contained in:
2026-09-20 02:38:46 +03:30
parent f392b68851
commit dcdeafaae1
2 changed files with 26 additions and 2 deletions
+4 -2
View File
@@ -128,8 +128,10 @@ def public_text(text):
def web_image(raw, destination): def web_image(raw, destination):
with Image.open(io.BytesIO(raw)) as original: with Image.open(io.BytesIO(raw)) as original:
if original.format not in {"JPEG", "PNG", "WEBP", "HEIF", "AVIF", "TIFF"}: if original.format not in {"JPEG", "PNG", "WEBP", "HEIF", "HEIC", "AVIF", "TIFF"}:
raise ValueError("Use JPEG, PNG, WebP, HEIC, AVIF, or TIFF photos") raise ValueError(
f"Detected {original.format or 'unknown'}; use JPEG, PNG, WebP, "
"HEIF/HEIC, AVIF, or TIFF photos")
taken_at = exif_photo_date(original.getexif()) taken_at = exif_photo_date(original.getexif())
image = ImageOps.exif_transpose(original) image = ImageOps.exif_transpose(original)
image.thumbnail((GALLERY_MAX_EDGE, GALLERY_MAX_EDGE), Image.Resampling.LANCZOS) image.thumbnail((GALLERY_MAX_EDGE, GALLERY_MAX_EDGE), Image.Resampling.LANCZOS)
+22
View File
@@ -171,6 +171,28 @@ def test_tiff_and_invalid_color_profile_are_accepted(service):
assert image.format == "JPEG" assert image.format == "JPEG"
def test_heic_format_label_is_accepted(service, monkeypatch):
_, client, _ = service
actual_open = Image.open
class HeicLabel:
def __init__(self, image):
self.image = image
self.format = "HEIC"
def __enter__(self):
return self
def __exit__(self, *args):
self.image.close()
def __getattr__(self, name):
return getattr(self.image, name)
monkeypatch.setattr(Image, "open", lambda source: HeicLabel(actual_open(source)))
assert upload(client, [photo()]).status_code == 202
def test_photo_date_comes_from_original_metadata(service): def test_photo_date_comes_from_original_metadata(service):
_, client, data = service _, client, data = service
exif = Image.Exif() exif = Image.Exif()