HEIC到JPEG的元数据转换



我试图在jpeg中转换heic文件,同时导入所有元数据(如gps信息和其他东西(,但使用下面的代码,转换是可以的,但创建的jpeg文件中没有存储元数据。任何人都可以描述我需要在转换方法中添加什么?

heif_file = pyheif.read("/transito/126APPLE_IMG_6272.HEIC")
image = Image.frombytes(
heif_file.mode,
heif_file.size,
heif_file.data,
"raw",
heif_file.mode,
heif_file.stride,
)
image.save("/transito/126APPLE_IMG_6272.JPEG", "JPEG")

谢谢,我找到了一个解决方案,我希望能帮助其他人:

# Open the file
heif_file = pyheif.read(file_path_heic)
# Creation of image 
image = Image.frombytes(
heif_file.mode,
heif_file.size,
heif_file.data,
"raw",
heif_file.mode,
heif_file.stride,
)
# Retrive the metadata
for metadata in heif_file.metadata or []:
if metadata['type'] == 'Exif':
exif_dict = piexif.load(metadata['data'])
# PIL rotates the image according to exif info, so it's necessary to remove the orientation tag otherwise the image will be rotated again (1° time from PIL, 2° from viewer).
exif_dict['0th'][274] = 0
exif_bytes = piexif.dump(exif_dict)
image.save(file_path_jpeg, "JPEG", exif=exif_bytes)

以下是将iPhone HEIC图像转换为JPG保存exif数据的另一种方法

  1. Pyhton 3.9(我在Rasperry PI 4 64位上(
  2. 安装枕套_heif(0.8.0(

运行以下代码,您将在新的JPEG图像中找到exif数据。诀窍是获取字典信息。无需额外转换。

这是示例代码,构建了您自己的包装器。

from PIL import Image
import pillow_heif
# open the image file
heif_file = pillow_heif.read_heif("/mnt/pictures/test/IMG_0001.HEIC")

#create the new image
image = Image.frombytes(
heif_file.mode,
heif_file.size,
heif_file.data,
"raw",
heif_file.mode,
heif_file.stride,
)
print(heif_file.info.keys())
dictionary=heif_file.info
exif_dict=dictionary['exif']
# debug 
print(exif_dict)

image.save('/tmp/test000.JPG', "JPEG", exif=exif_dict)

HEIF到JPEG:

from PIL import Image
import pillow_heif
if __name__ == "__main__":
pillow_heif.register_heif_opener()
img = Image.open("any_image.heic")
img.save("output.jpeg")

JPEG到HEIF:

from PIL import Image
import pillow_heif
if __name__ == "__main__":
pillow_heif.register_heif_opener()
img = Image.open("any_image.jpg")
img.save("output.heic")
  1. 旋转(XMP的EXIF(将在需要时自动删除。

  2. register_heif_opener的调用可以通过导入pillow_heif.HeifImagePlugin而不是pillow_heif来替换

  3. 元数据可以在Pillow的";信息";字典,并将在保存到HEIF时保存。

最新更新