From be3992f655c48e70ab85b47e66a0263203a5d979 Mon Sep 17 00:00:00 2001 From: Travis Abendshien Date: Sat, 18 May 2024 18:58:01 -0700 Subject: [PATCH] Add HEIC/HEIF image support - Add support for HEIC/HEIF image thumbnails and previews - Replace dependency "pillow_avif_plugin" with "pi-heif" - Remove unused dependencies in ts_cli.py --- requirements.txt | 2 +- tagstudio/src/cli/ts_cli.py | 11 +++++++---- tagstudio/src/qt/widgets/thumb_renderer.py | 4 +++- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/requirements.txt b/requirements.txt index 43c8a566..e093bc96 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,10 +1,10 @@ humanfriendly==10.0 opencv_python>=4.8.0.74,<=4.9.0.80 Pillow==10.3.0 -pillow_avif_plugin>=1.3.1,<=1.4.3 PySide6>=6.5.1.1,<=6.6.3.1 PySide6_Addons>=6.5.1.1,<=6.6.3.1 PySide6_Essentials>=6.5.1.1,<=6.6.3.1 typing_extensions>=3.10.0.0,<=4.11.0 ujson>=5.8.0,<=5.9.0 rawpy==0.21.0 +pi-heif==0.16.0 diff --git a/tagstudio/src/cli/ts_cli.py b/tagstudio/src/cli/ts_cli.py index 4200e4b0..c5eb0b88 100644 --- a/tagstudio/src/cli/ts_cli.py +++ b/tagstudio/src/cli/ts_cli.py @@ -7,14 +7,17 @@ import datetime import math -from multiprocessing import Value + +# from multiprocessing import Value import os -import subprocess + +# import subprocess import sys import time -from PIL import Image, ImageOps, ImageChops, UnidentifiedImageError +from PIL import Image, ImageChops, UnidentifiedImageError from PIL.Image import DecompressionBombError -import pillow_avif + +# import pillow_avif from pathlib import Path import traceback import cv2 diff --git a/tagstudio/src/qt/widgets/thumb_renderer.py b/tagstudio/src/qt/widgets/thumb_renderer.py index 8748616b..fdf2c1be 100644 --- a/tagstudio/src/qt/widgets/thumb_renderer.py +++ b/tagstudio/src/qt/widgets/thumb_renderer.py @@ -10,6 +10,7 @@ from pathlib import Path import cv2 import rawpy +from pillow_heif import register_heif_opener, register_avif_opener from PIL import ( Image, UnidentifiedImageError, @@ -36,8 +37,9 @@ ERROR = "[ERROR]" WARNING = "[WARNING]" INFO = "[INFO]" - logging.basicConfig(format="%(message)s", level=logging.INFO) +register_heif_opener() +register_avif_opener() class ThumbRenderer(QObject):