处理 HEIC 格式的图片


发布于

|

分类

苹果给我们带来了更强大的HEIC图片格式,也给我们带来了一大堆麻烦。

HEIC不能算是太新的格式吧,但确实是随着iOS13的到来才逐渐流行起来。

但是,目前,从OpenCV,到PIL,再到ImageIO,都无法直接处理这个格式。

于是我们需要借助pyhied这个专门的包来实现对HEIC图片的读取。

from pathlib import Path

import cv2
import numpy as np
import pyheif

img_path = Path("some/image.HEIC")

img_binary = img_path.open("rb").read()
heif_file = pyheif.read(img_binary) # 当然也能直接写文件地址,或者传入一个文件对象

然后我们可以将它转成熟悉的 OpenCV 格式

img = np.frombuffer(heif_file.data, dtype=np.uint8).reshape(*reversed(heif_file.size), -1)
img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)

也可以转换成 PIL Image

img = Image.frombytes(mode=i.mode, size=i.size, data=i.data)

那么如何判断这是个HEIC图片呢?这个使用Magic来判断就成:

import magic

filetype = magic.from_buffer(img_binary, mime=True) # filetype="image/heic"

注意有个小坑哈~如果系统比较老,那么magic也是不认它的,会得到 application/octet-stream。


嗯……升级服务去了……这样就能吹一波「我们的服务支持主流文件格式」了。


评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注