我正在尝试从数据集中的图像中删除EXIF数据(我将在传输学习中使用该数据)。然而,它似乎不起作用。下面是我的代码:
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模块,如下所示:
# 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数据(以字典的形式)或“无”,如果它不存在,但从来没有“完成”。为什么达不到那部分呢?
发布于 2022-07-06 12:35:31
对于通过Google无意中发现这一点的人来说,使用PIL有一个简单的解决方案:
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中进行测试:
>>> 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())
{}https://stackoverflow.com/questions/63076685
复制相似问题