Skip to main content

Python 3.6+ interface to libheif library

Project description

pyheif-iplweb

Hacked version for building binary wheels for macOS because of this issue.

Please use the original library here.

To build, download this repo, create virtualenv with your favourite Python version, don't forget about downloading libheic with homebrew or macports and type:

make all

In the dist directory you will find the wheel.

pyheif

Python 3.6+ interface to libheif library using CFFI

Note: currently only reading is supported.

Installation

Simple installation - Linux (installs manylinux2014 wheel, doesn't work with Alpine)

pip install --upgrade pip
pip install pyheif

Installing from source - MacOS

brew install libffi libheif
pip install git+https://github.com/carsales/pyheif.git

Installing from source - Linux

apt install libffi libheif-dev libde265-dev

or

yum install libffi libheif-devel libde265-devel

then

pip install git+https://github.com/carsales/pyheif.git

Installing from source - Windows

Sorry, not going to happen!

Usage

Read the primary image of a HEIF encoded file

The pyheif.read(path_or_bytes) function can be used to read the primary image of a HEIF encoded file. It can be passed any of the following:

  • A string path to a file on disk
  • A pathlib.Path path object
  • A Python bytes or bytearray object containing HEIF content
  • A file-like object with a .read() method that returns bytes

It returns a HeifImage object.

import pyheif

# Using a file path:
heif_file = pyheif.read("IMG_7424.HEIC")
# Or using bytes directly:
heif_file = pyheif.read(open("IMG_7424.HEIC", "rb").read())

Converting to a Pillow Image object

If your HEIF file contains an image that you would like to manipulate, you can do so using the Pillow Python library. You can convert a HeifImage to a Pillow image like so:

from PIL import Image
import pyheif

heif_file = pyheif.read("IMG_7424.HEIC")
image = Image.frombytes(
    heif_file.mode, 
    heif_file.size, 
    heif_file.data,
    "raw",
    heif_file.mode,
    heif_file.stride,
    )

Note: the mode property is passed twice - once to the mode argument of the frombytes method, and again to the mode argument of the raw decoder.

You can now use any Pillow method to manipulate the file. Here's how to convert it to JPEG:

image.save("IMG_7424.jpg", "JPEG")

Read the entire container within the HEIF file

The pyheif.open_container(path_or_bytes) function can be used to read the HEIF container from a HEIF encoded file. It takes the same parameter as pyheif.read()

It returns a HeifContainer object.

Objects

The HeifImage object

The HeifImage has the following properties:

  • mode - the image mode, e.g. "RGB" or "RGBA"
  • size - the size of the image as a (width, height) tuple of integers
  • data - the raw decoded file data, as bytes
  • metadata - a list of metadata dictionaries
  • color_profile - a color profile dictionary
  • stride - the number of bytes in a row of decoded file data
  • bit_depth - the number of bits in each component of a pixel

The UndecodedHeifImage object

This is a HEIF image that has not been decoded. Calling the UndecodedHeifImage.load() method will load the data and the object will become a HeifImage

The HeifContainer object

The HeifContainer has the following properties:

  • primary_image - the HeifTopLevelImage object of the primary image in the file.
  • top_level_images - a list of all HeifTopLevelImage objects in the file.

The HeifTopLevelImage object

The HeifTopLevelImage has the following properties:

  • id - the id of the image
  • image - the UndecodedHeifImage or HeifImage object of the image
  • is_primary - is this the primary image in the container
  • depth_image - the HeifDepthImage if there is one
  • auxiliary_images - a list of HeifAuxiliaryImage objects

The HeifDepthImage object

The HeifDepthImage has the following properties:

  • id - the id of the image
  • image - the UndecodedHeifImage or HeifImage object of the image

The HeifAuxiliaryImage object

The HeifAuxiliaryImage has the following properties:

  • id - the id of the image
  • image - the UndecodedHeifImage or HeifImage object of the image
  • type - a string indicating the type of auxiliary image

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

pyheif_iplweb-0.7.1.dev1176-cp312-none-any.whl (128.6 kB view details)

Uploaded CPython 3.12

pyheif_iplweb-0.7.1.dev1176-cp311-none-any.whl (88.9 kB view details)

Uploaded CPython 3.11

pyheif_iplweb-0.7.1.dev1176-cp310-none-any.whl (86.1 kB view details)

Uploaded CPython 3.10

File details

Details for the file pyheif_iplweb-0.7.1.dev1176-cp312-none-any.whl.

File metadata

File hashes

Hashes for pyheif_iplweb-0.7.1.dev1176-cp312-none-any.whl
Algorithm Hash digest
SHA256 e8b1221a920086a033c964b488f1579542682d79cd2432110097417b4708d379
MD5 b8c5cc3b7eae27d9e043953247c47924
BLAKE2b-256 3c8de80c5169685dd66039e62d35fe5613993764883be5a58e815a6cced96ce6

See more details on using hashes here.

File details

Details for the file pyheif_iplweb-0.7.1.dev1176-cp311-none-any.whl.

File metadata

File hashes

Hashes for pyheif_iplweb-0.7.1.dev1176-cp311-none-any.whl
Algorithm Hash digest
SHA256 f2de518398cbcdc6062b16e01f2acec943c38497f37e4d8e7575facfbec75c08
MD5 2c6af7ba80e9e453516e55b179f9307b
BLAKE2b-256 95b0f88854ecfe3172ed155fedf9506f7469b9f25d69e81d6e5da88a6985044d

See more details on using hashes here.

File details

Details for the file pyheif_iplweb-0.7.1.dev1176-cp310-none-any.whl.

File metadata

File hashes

Hashes for pyheif_iplweb-0.7.1.dev1176-cp310-none-any.whl
Algorithm Hash digest
SHA256 72f7836029bf3b8b5c4cecbced2ff4234a631c578d16f9d780118950fbb906cc
MD5 47bdb3a551865c9ae44666c923a9a2a8
BLAKE2b-256 87892cee563bb91c40798da40e0c9a10f342ec896f5a641b867d2ba314fd0958

See more details on using hashes here.

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