Python如何读写图片的详细信息?
如下图所示,我一开始以为这些属性都是在图片的EXIF信息当中的,但用piexif或exifread读取时发现只能读取到标题和作者
利用工具发现
请问使用Python该如何读取和写入图片的上述信息呢?
有现成工具最好,如果没有的话相关的文档或者介绍也是可以的,谢谢了
补充一下,我上面图里标注的几个读取不了的属性,并不是说用piexif或exifread或PIL里的getexif()得不到值,而是得到的值是一串数字组成的列表/元组
参考GPT和自己的思路:要读取和写入图片的详细信息,需要使用Python的图像处理库。常用的图像处理库有Pillow和OpenCV等。以下是使用Pillow库读取和写入图片的EXIF和IFD0信息的示例代码:
from PIL import Image
from PIL.ExifTags import TAGS
# 读取图片的EXIF信息
def get_exif_data(image_path):
with Image.open(image_path) as img:
exif = img.getexif()
exif_data = {}
for tag_id, value in exif.items():
tag = TAGS.get(tag_id, tag_id)
exif_data[tag] = value
return exif_data
# 写入图片的EXIF信息
def write_exif_data(image_path, exif_data):
with Image.open(image_path) as img:
exif_bytes = img.info['exif'] if 'exif' in img.info else None
img.save(image_path, exif=exif_data, exif_bytes=exif_bytes)
# 读取图片的IFD0信息
def get_ifd0_data(image_path):
with Image.open(image_path) as img:
ifd0_data = img.info.get('ifd0', {})
return ifd0_data
# 写入图片的IFD0信息
def write_ifd0_data(image_path, ifd0_data):
with Image.open(image_path) as img:
img.info['ifd0'] = ifd0_data
img.save(image_path)
这段代码可以读取和写入图片的EXIF和IFD0信息。例如,要读取图片的EXIF信息,可以使用以下代码:
exif_data = get_exif_data('image.jpg')
print(exif_data)
要写入图片的EXIF信息,可以使用以下代码:
exif_data = {
TAGS['Make']: 'Canon',
TAGS['Model']: 'Canon EOS 5D Mark IV',
TAGS['Software']: 'Adobe Photoshop Lightroom Classic 10.3 (Windows)',
# 其他属性
}
write_exif_data('image.jpg', exif_data)
要读取图片的IFD0信息,可以使用以下代码:
ifd0_data = get_ifd0_data('image.jpg')
print(ifd0_data)
要写入图片的IFD0信息,可以使用以下代码:
ifd0_data = {
'ImageDescription': '这是一张测试图片',
'Artist': '测试作者',
# 其他属性
}
write_ifd0_data('image.jpg', ifd0_data)
注意,这些信息不一定都存在于图片的EXIF信息当中,有些信息可能存在于IFD0中。在使用时需要根据具体情况选择读取或写入哪些信息。
“Devil组”引证GPT后的撰写:
下面是一个示例代码,演示如何读取和写入图像的各种属性,包括标题、作者、日期、描述等等。
from PIL import Image
from PIL.ExifTags import TAGS
# 打开图像文件
img = Image.open("example.jpg")
# 读取图像的元数据
metadata = img.getexif()
# 将元数据解析为可读的格式
metadata_dict = {}
for tag_id, value in metadata.items():
tag = TAGS.get(tag_id, tag_id)
metadata_dict[tag] = value
# 输出元数据
print(metadata_dict)
# 修改元数据
metadata_dict["ImageDescription"] = "这是一个美丽的风景照片"
metadata_dict["DateTime"] = "2022:03:08 12:00:00"
# 将元数据转换回原始格式
new_metadata = {}
for tag, value in metadata_dict.items():
tag_id = TAGS.get(tag, tag)
new_metadata[tag_id] = value
# 保存修改后的图像文件
img.save("example_modified.jpg", exif=new_metadata)
用Pillow库的Image.open()函数打开一张图片,然后使用img.getexif()函数读取该图片的元数据。元数据以一个字典的形式返回,其中键是元数据标签的编号,值是该标签的值。
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
在Python中可以使用Pillow或者OpenCV等库来读取和写入图片的详细信息。其中,Pillow库应用更广泛,下面以Pillow库为例进行说明。
读取图片的详细信息:
from PIL import Image
from PIL.ExifTags import TAGS
# 打开图片
im = Image.open("test.jpg")
# 获取所有的Exif信息
exif = im.getexif()
# 遍历Exif信息,将其以可读的方式输出
for tag_id in exif:
tag = TAGS.get(tag_id, tag_id)
data = exif.get(tag_id)
if isinstance(data, bytes):
data = data.decode()
print(f"{tag:25}: {data}")
输出结果类似于:
Make : Canon
Model : Canon EOS 60D
Orientation : 1
XResolution : 72
YResolution : 72
ResolutionUnit : 2
DateTime : 2019:11:23 21:08:08
YCbCrPositioning : 1
ExifOffset : 234
GPSInfo : {GPSInfo}
写入图片的详细信息:
from PIL import Image
from PIL.ExifTags import TAGS
# 打开图片
im = Image.open("test.jpg")
# 获取所有的Exif信息
exif = im.getexif()
# 修改Exif信息中的标题和作者
exif[TAGS["ImageDescription"]] = "这是一张测试照片"
exif[TAGS["Artist"]] = "TestUser"
# 将修改后的Exif信息写回图片
im.save("test.jpg", exif=exif)
需要注意的是,有些图片可能没有Exif信息,读取时需要进行异常处理;在写入图片时,需要使用im.save()方法,并将exif参数设置为修改后的Exif信息。
如果我的回答解决了您的问题,请采纳!
纯恶心人,全是些网上一搜就能搜到的AI回答,getexif我不知道吗,chardet我不知道吗,一点题目不看,AI跑一遍就把答案复制粘贴过来