Skip to main content

Python interface for libheif library

Project description

pillow-heif

Analysis & Coverage Nightly build Wheels test docs codecov

PythonVersion impl pypi Downloads Downloads

Mac OS Windows Linux Alpine Linux Raspberry Pi

Python bindings to libheif for working with HEIF images and plugin for Pillow.

Features:

  • Decoding of 8, 10, 12 bit HEIC and AVIF files.
  • Encoding of 8, 10, 12 bit HEIC and AVIF files.
  • EXIF, XMP, IPTC read & write support.
  • Support of multiple images in one file and a PrimaryImage attribute.
  • Adding & removing thumbnails.
  • Reading of Depth Images.
  • Adding HEIF support to Pillow in one line of code as a plugin.

Note: Here is a light version pi-heif of this project without encoding capabilities.

Install

python3 -m pip install -U pip
python3 -m pip install pillow-heif

Example of use as a Pillow plugin

from PIL import Image
from pillow_heif import register_heif_opener

register_heif_opener()

im = Image.open("image.heic")  # do whatever need with a Pillow image
im = im.rotate(13)
im.save(f"rotated_image.heic", quality=90)

16 bit PNG to 10 bit HEIF using OpenCV

import cv2
import pillow_heif

cv_img = cv2.imread("16bit_with_alpha.png", cv2.IMREAD_UNCHANGED)
heif_file = pillow_heif.from_bytes(
    mode="BGRA;16",
    size=(cv_img.shape[1], cv_img.shape[0]),
    data=bytes(cv_img)
)
heif_file.save("RGBA_10bit.heic", quality=-1)

8/10/12 bit HEIF to 8/16 bit PNG using OpenCV

import numpy as np
import cv2
import pillow_heif

heif_file = pillow_heif.open_heif("image.heic", convert_hdr_to_8bit=False, bgr_mode=True)
np_array = np.asarray(heif_file)
cv2.imwrite("image.png", np_array)

Accessing decoded image data

import pillow_heif

if pillow_heif.is_supported("image.heic"):
    heif_file = pillow_heif.open_heif("image.heic", convert_hdr_to_8bit=False)
    print("image size:", heif_file.size)
    print("image mode:", heif_file.mode)
    print("image data length:", len(heif_file.data))
    print("image data stride:", heif_file.stride)

Get decoded image data as a Numpy array

import numpy as np
import pillow_heif

if pillow_heif.is_supported("input.heic"):
    heif_file = pillow_heif.open_heif("input.heic")
    np_array = np.asarray(heif_file)

AVIF support

Working with the AVIF files as the same as with the HEIC files. Just use a separate function to register plugin:

import pillow_heif

pillow_heif.register_avif_opener()

More Information

Wheels

Wheels table macOS
Intel
macOS
Silicon
Windows
64bit
musllinux* manylinux*
CPython 3.8
CPython 3.9
CPython 3.10
CPython 3.11
CPython 3.12
PyPy 3.8 v7.3 N/A
PyPy 3.9 v7.3 N/A
PyPy 3.10 v7.3 N/A

* x86_64, aarch64 wheels.

i686, ARMv7l, PyPy 32-bit wheels are published only for pi-heif from 0.13.0 version.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pillow_heif-0.16.0.tar.gz (14.9 MB view hashes)

Uploaded Source

Built Distributions

pillow_heif-0.16.0-pp310-pypy310_pp73-win_amd64.whl (8.2 MB view hashes)

Uploaded PyPy Windows x86-64

pillow_heif-0.16.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.5 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

pillow_heif-0.16.0-pp310-pypy310_pp73-macosx_12_0_arm64.whl (3.3 MB view hashes)

Uploaded PyPy macOS 12.0+ ARM64

pillow_heif-0.16.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl (5.2 MB view hashes)

Uploaded PyPy macOS 10.10+ x86-64

pillow_heif-0.16.0-pp39-pypy39_pp73-win_amd64.whl (8.2 MB view hashes)

Uploaded PyPy Windows x86-64

pillow_heif-0.16.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.5 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

pillow_heif-0.16.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (6.7 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

pillow_heif-0.16.0-pp39-pypy39_pp73-macosx_12_0_arm64.whl (3.3 MB view hashes)

Uploaded PyPy macOS 12.0+ ARM64

pillow_heif-0.16.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl (5.2 MB view hashes)

Uploaded PyPy macOS 10.10+ x86-64

pillow_heif-0.16.0-pp38-pypy38_pp73-win_amd64.whl (8.2 MB view hashes)

Uploaded PyPy Windows x86-64

pillow_heif-0.16.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.5 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

pillow_heif-0.16.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (6.7 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

pillow_heif-0.16.0-pp38-pypy38_pp73-macosx_12_0_arm64.whl (3.3 MB view hashes)

Uploaded PyPy macOS 12.0+ ARM64

pillow_heif-0.16.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl (5.2 MB view hashes)

Uploaded PyPy macOS 10.10+ x86-64

pillow_heif-0.16.0-cp312-cp312-win_amd64.whl (8.2 MB view hashes)

Uploaded CPython 3.12 Windows x86-64

pillow_heif-0.16.0-cp312-cp312-musllinux_1_2_x86_64.whl (8.6 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.2+ x86-64

pillow_heif-0.16.0-cp312-cp312-musllinux_1_2_aarch64.whl (7.9 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.2+ ARM64

pillow_heif-0.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.5 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

pillow_heif-0.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (6.7 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

pillow_heif-0.16.0-cp312-cp312-macosx_12_0_arm64.whl (3.3 MB view hashes)

Uploaded CPython 3.12 macOS 12.0+ ARM64

pillow_heif-0.16.0-cp312-cp312-macosx_10_10_x86_64.whl (5.2 MB view hashes)

Uploaded CPython 3.12 macOS 10.10+ x86-64

pillow_heif-0.16.0-cp311-cp311-win_amd64.whl (8.2 MB view hashes)

Uploaded CPython 3.11 Windows x86-64

pillow_heif-0.16.0-cp311-cp311-musllinux_1_2_x86_64.whl (8.6 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.2+ x86-64

pillow_heif-0.16.0-cp311-cp311-musllinux_1_2_aarch64.whl (7.9 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.2+ ARM64

pillow_heif-0.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.5 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

pillow_heif-0.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (6.7 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

pillow_heif-0.16.0-cp311-cp311-macosx_12_0_arm64.whl (3.3 MB view hashes)

Uploaded CPython 3.11 macOS 12.0+ ARM64

pillow_heif-0.16.0-cp311-cp311-macosx_10_10_x86_64.whl (5.2 MB view hashes)

Uploaded CPython 3.11 macOS 10.10+ x86-64

pillow_heif-0.16.0-cp310-cp310-win_amd64.whl (8.2 MB view hashes)

Uploaded CPython 3.10 Windows x86-64

pillow_heif-0.16.0-cp310-cp310-musllinux_1_2_x86_64.whl (8.6 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.2+ x86-64

pillow_heif-0.16.0-cp310-cp310-musllinux_1_2_aarch64.whl (7.9 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.2+ ARM64

pillow_heif-0.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.5 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

pillow_heif-0.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (6.7 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

pillow_heif-0.16.0-cp310-cp310-macosx_12_0_arm64.whl (3.3 MB view hashes)

Uploaded CPython 3.10 macOS 12.0+ ARM64

pillow_heif-0.16.0-cp310-cp310-macosx_10_10_x86_64.whl (5.2 MB view hashes)

Uploaded CPython 3.10 macOS 10.10+ x86-64

pillow_heif-0.16.0-cp39-cp39-win_amd64.whl (8.2 MB view hashes)

Uploaded CPython 3.9 Windows x86-64

pillow_heif-0.16.0-cp39-cp39-musllinux_1_2_x86_64.whl (8.6 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.2+ x86-64

pillow_heif-0.16.0-cp39-cp39-musllinux_1_2_aarch64.whl (7.9 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.2+ ARM64

pillow_heif-0.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.5 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

pillow_heif-0.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (6.7 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

pillow_heif-0.16.0-cp39-cp39-macosx_12_0_arm64.whl (3.3 MB view hashes)

Uploaded CPython 3.9 macOS 12.0+ ARM64

pillow_heif-0.16.0-cp39-cp39-macosx_10_10_x86_64.whl (5.2 MB view hashes)

Uploaded CPython 3.9 macOS 10.10+ x86-64

pillow_heif-0.16.0-cp38-cp38-win_amd64.whl (8.2 MB view hashes)

Uploaded CPython 3.8 Windows x86-64

pillow_heif-0.16.0-cp38-cp38-musllinux_1_2_x86_64.whl (8.6 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.2+ x86-64

pillow_heif-0.16.0-cp38-cp38-musllinux_1_2_aarch64.whl (7.9 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.2+ ARM64

pillow_heif-0.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.5 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

pillow_heif-0.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (6.7 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

pillow_heif-0.16.0-cp38-cp38-macosx_12_0_arm64.whl (3.3 MB view hashes)

Uploaded CPython 3.8 macOS 12.0+ ARM64

pillow_heif-0.16.0-cp38-cp38-macosx_10_10_x86_64.whl (5.2 MB view hashes)

Uploaded CPython 3.8 macOS 10.10+ x86-64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page