如何将 EXIF/其他元数据插入存储在内存缓冲区中的 JPEG 中



>我使用Python OpenCV创建了一个JPEG,EXIF数据在此过程中丢失,并且在调用imwrite时显然无法重新添加(参考:在python中使用opencv编辑图像exif数据时无法保留图像exif数据(。

两个问题:

  1. 通常,如何将原始 EXIF 数据/新的自定义元数据写入内存中而不是文件中的 JPEG

  2. 枕头/PIL是否能够维护EXIF数据并允许添加补充元数据?截至 2013 年(参考:如何使用 PIL 维护图像调整大小的 exif 数据(,除非通过 tmp 文件(这对我来说不是一个选项(,否则这似乎是不可能的。

一如既往的感谢

我不确定我是否理解您要做什么,但我认为您正在尝试使用 OpenCV 处理图像,然后重新插入您在 OpenCV 打开它时丢失的 EXIF 数据...

所以,希望你可以做你已经在做的事情,但也用PIL/Pillow打开图像并提取EXIF数据,然后将其写入OpenCV处理的图像中。

from PIL import Image
import io
# Read your image with EXIF data using PIL/Pillow
imWithEXIF = Image.open('image.jpg')

您现在将有一个带有 EXIF 信息的字典:

imWIthEXIF.info['exif']

您现在希望将该EXIF数据写入使用OpenCV处理的图像中,因此:

# Make memory buffer for JPEG-encoded image
buffer = io.BytesIO()
# Convert OpenCV image onto PIL Image
OpenCVImageAsPIL = Image.fromarray(OpenCVImage)
# Encode newly-created image into memory as JPEG along with EXIF from other image
OpenCVImageAsPIL.save(buffer, format='JPEG', exif=imWIthEXIF.info['exif']) 

小心。。。我在上面的代码中假设OpenCVImage是一个 Numpy 数组,并且您已经调用cvtColor(cv2.COLOR_BGR2RGB)转到 PIL 使用的传统 RGB 通道排序,而不是 OpenCV 的 BGR 通道排序。

关键词:Python,OpenCV,PIL,枕头,EXIF,保存,插入,复制,传输,图像,图像处理,图像处理,字典,BytesIO,内存,内存,缓冲区。

最新更新