跳转到主要内容

Python 3.6+版本的libheif库接口

项目描述

pyheif-iplweb

由于这个问题,为构建macOS的二进制轮而修改的版本。

请在此处使用原始库

要构建,请下载此仓库,使用您喜欢的Python版本创建virtualenv,不要忘记使用homebrew或macports下载libheic,然后输入

make all

dist目录中,您可以找到轮文件。

pyheif

使用CFFI的Python 3.6+版本的libheif库接口

注意:目前仅支持读取。

安装

简单安装 - Linux(安装manylinux2014 wheel,不适用于Alpine)

pip install --upgrade pip
pip install pyheif

从源代码安装 - MacOS

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

从源代码安装 - Linux

apt install libffi libheif-dev libde265-dev

yum install libffi libheif-devel libde265-devel

然后

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

从源代码安装 - Windows

Sorry, not going to happen!

用法

读取HEIF编码文件的原始图像

可以使用pyheif.read(path_or_bytes)函数读取HEIF编码文件的原始图像。它可以传递以下任意一种

  • 磁盘上文件的字符串路径
  • pathlib.Path路径对象
  • 包含HEIF内容的Python bytesbytearray对象
  • 具有.read()方法返回字节的文件-like对象

它返回一个HeifImage对象。

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())

转换为Pillow图像对象

如果您要处理的HEIF文件中包含图像,您可以使用Pillow Python库进行操作。以下是将HeifImage转换为Pillow图像的方法:

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,
    )

注意mode属性被传递了两次——一次是传递给frombytes方法的mode参数,另一次是传递给raw解码器的mode参数。

现在您可以使用任何Pillow方法来操作文件。以下是将其转换为JPEG的示例:

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

读取HEIF文件中的整个容器

可以使用pyheif.open_container(path_or_bytes)函数从HEIF编码文件中读取HEIF容器。它接受与pyheif.read()相同的参数。

它返回一个HeifContainer对象。

对象

HeifImage对象

HeifImage具有以下属性

  • mode - 图像模式,例如"RGB"或"RGBA"
  • size - 图像的大小,作为整数元组(width, height)
  • data - 原始解码的文件数据,作为字节
  • metadata - 一系列元数据字典
  • color_profile - 颜色配置文件字典
  • stride - 解码文件数据行中的字节数
  • bit_depth - 每个像素组件中的位数

UndecodedHeifImage对象

这是一个未解码的HEIF图像。调用UndecodedHeifImage.load()方法将加载数据,对象将变为HeifImage

HeifContainer对象

HeifContainer具有以下属性

  • primary_image - 文件中主图像的HeifTopLevelImage对象。
  • top_level_images - 文件中所有HeifTopLevelImage对象的列表。

HeifTopLevelImage对象

HeifTopLevelImage具有以下属性

  • id - 图像的id
  • image - 图像的UndecodedHeifImageHeifImage对象
  • is_primary - 这是否是容器中的主图像
  • depth_image - 如果有的话,是HeifDepthImage
  • auxiliary_images - 一系列HeifAuxiliaryImage对象

HeifDepthImage对象

HeifDepthImage具有以下属性

  • id - 图像的id
  • image - 图像的UndecodedHeifImageHeifImage对象

HeifAuxiliaryImage对象

HeifAuxiliaryImage具有以下属性

  • id - 图像的id
  • image - 图像的UndecodedHeifImageHeifImage对象
  • type - 表示辅助图像类型的字符串

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

此版本没有可用的源代码分发文件。请参阅有关生成分发存档的教程。

构建分发

pyheif_iplweb-0.7.1.dev1176-cp312-none-any.whl (128.6 kB 查看哈希值)

上传时间 CPython 3.12

pyheif_iplweb-0.7.1.dev1176-cp311-none-any.whl (88.9 kB 查看哈希值)

上传时间 CPython 3.11

pyheif_iplweb-0.7.1.dev1176-cp310-none-any.whl (86.1 kB 查看哈希值)

上传时间 CPython 3.10

由以下组织支持