首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从数据集中删除EXIF数据?

如何从数据集中删除EXIF数据?
EN

Stack Overflow用户
提问于 2020-07-24 15:27:34
回答 1查看 748关注 0票数 1

我正在尝试从数据集中的图像中删除EXIF数据(我将在传输学习中使用该数据)。然而,它似乎不起作用。下面是我的代码:

代码语言:javascript
复制
import os
from PIL import Image
import piexif
import imghdr
from tqdm import tqdm
import warnings

Folder = 'drive/My Drive/PetImages'
labels =['Dog', 'Cat']
for label in labels:
  imageFolder = os.path.join(Folder, label)  
  listImages = os.listdir(imageFolder)
  for img in tqdm(listImages):
      imgPath = os.path.join(imageFolder,img)

      try:
        img = Image.open(imgPath)
        data = list(img.getdata())
        image_without_exif = Image.new(img.mode, img.size)
        image_without_exif.putdata(data)
        image_without_exif.save(img)
        print("done")
      except:
        print("except")

我试着使用PIL保存映像(按照前面问到的问题:Python: Remove Exif info from images),但是输出完全由“除了”组成。

我再次尝试使用piexif模块,如下所示:

代码语言:javascript
复制
# Same imports as above
Folder = 'drive/My Drive/PetImages'
labels =['Dog', 'Cat']
for label in labels:
  imageFolder = os.path.join(Folder, label)  
  listImages = os.listdir(imageFolder)
  for img in tqdm(listImages):
      imgPath = os.path.join(imageFolder,img)

      try:
          ImageType = img.format
          # warnings.filterwarnings("error")
          if ImageType in ["JPEG", "TIF", "WAV"]:
            exif_data = img._getexif()
            print(exif_data)
            piexif.remove(img)
            print("done")
      except:
        print("except")

在上面的代码中,我首先检查图像类型,以确保_getexif()方法确实存在,然后在将数据保存到exif_data变量中之后删除它。输出包括“除了”和偶尔的exif数据(以字典的形式)或“无”,如果它不存在,但从来没有“完成”。为什么达不到那部分呢?

EN

回答 1

Stack Overflow用户

发布于 2022-07-06 12:35:31

对于通过Google无意中发现这一点的人来说,使用PIL有一个简单的解决方案:

代码语言:javascript
复制
from PIL import Image

im = Image.open('some-image.jpg')
# this clears all exif data
im.getexif().clear()
im.save('some-image-without-exif.jpg')

我认为getexif()只允许名称可能暗示的读取访问,但事实证明并非如此。

编辑:在我的例子中,它甚至可以在没有im.getexif().clear()的情况下加载和保存文件。不过,我不知道这有多可靠。不过,该命令肯定会从图像对象中删除exif-数据。这可以简单地在Python中进行测试:

代码语言:javascript
复制
>>> from PIL import Image
>>> im = Image.open('some-image.jpg')
>>> print(im.getexif())
{296: 2, 282: 72.0, 283: 72.0 ..... }
>>> im.getexif().clear()
>>> print(im.getexif())
{}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63076685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档