diff --git a/IMG_3616.HEIC b/IMG_3616.HEIC new file mode 100644 index 000000000..815a121b4 Binary files /dev/null and b/IMG_3616.HEIC differ diff --git a/src/PIL/HeifImagePlugin.py b/src/PIL/HeifImagePlugin.py new file mode 100644 index 000000000..5e4f2e6c5 --- /dev/null +++ b/src/PIL/HeifImagePlugin.py @@ -0,0 +1,38 @@ +import io + +from . import Image, ImageFile + +try: + import pyheif + print("!") +except ImportError: + pyheif = None + +def _accept(prefix): + check = pyheif.check(prefix) + return check != pyheif.heif_filetype_no + + +class HeifImageFile(ImageFile.ImageFile): + format = "HEIF" + format_description = "HEIF Image File Format" + + def _open(self): + b = self.fp.read() + if not _accept(b): + raise ValueError("Not a HEIF image file") + + heif_file = pyheif.read(b) + self._size = heif_file.size + self.mode = heif_file.mode + self.fp = io.BytesIO(heif_file.data) + self.tile = [("raw", (0, 0) + heif_file.size, 0, (heif_file.mode, heif_file.stride))] + + +if pyheif: + print("!!") + Image.register_open(HeifImageFile.format, HeifImageFile, _accept) + Image.register_extensions(HeifImageFile.format, [".heif", ".heic", ".hif"]) + Image.register_mime(HeifImageFile.format, "image/heif") + Image.register_mime(HeifImageFile.format, "image/heic") + diff --git a/src/PIL/__init__.py b/src/PIL/__init__.py index d225ed134..62a24c76e 100644 --- a/src/PIL/__init__.py +++ b/src/PIL/__init__.py @@ -98,6 +98,7 @@ _plugins = [ "GifImagePlugin", "GribStubImagePlugin", "Hdf5StubImagePlugin", + "HeifImagePlugin", "IcnsImagePlugin", "IcoImagePlugin", "ImImagePlugin", diff --git a/tree-with-transparency.heic b/tree-with-transparency.heic new file mode 100644 index 000000000..346ae48c6 Binary files /dev/null and b/tree-with-transparency.heic differ diff --git a/venv/pyvenv.cfg b/venv/pyvenv.cfg new file mode 100644 index 000000000..7786da11a --- /dev/null +++ b/venv/pyvenv.cfg @@ -0,0 +1,3 @@ +home = /usr/local/Cellar/python@3.8/3.8.3_2/bin +include-system-site-packages = false +version = 3.8.3 diff --git a/x.png b/x.png new file mode 100644 index 000000000..e412756e9 Binary files /dev/null and b/x.png differ