Python修改图片Exif属性

 Exif详细描述参考:

Exif文件格式描述_石旭东的技术博客_51CTO博客

1、exif插件直接写入字节流

API Reference — exif 1.3.5 documentation

from exif import Image, DATETIME_STR_FORMAT
from datetime import datetime


with open(r'D:\data\09keypoint\1\002000.jpg', 'rb') as image_file:
     image_bytes = image_file.read()
my_image = Image(image_bytes)
my_image.model = "can"
my_image.make = "IPHONE"
my_image.software = "k"
my_image.image_description = "k"
my_image.resolution = "200"

# my_image.compression="group4"
# my_image.compressed_bits_per_pixel = "40"

datetime_taken = datetime(year=1999, month=12, day=31, hour=23, minute=49, second=12)
datetime_scanned = datetime(year=2020, month=7, day=11, hour=10, minute=11, second=37)
my_image.datetime_original = datetime_taken.strftime(DATETIME_STR_FORMAT)
my_image.datetime_digitized = datetime_scanned.strftime(DATETIME_STR_FORMAT)
print(dir(my_image))
print(my_image.get_thumbnail)


with open(r'D:\data\09keypoint\1\194 (4)_new.jpg', 'wb') as new_image_file:
     new_image_file.write(my_image.get_file())

2、piexif图片重写

# from PIL import Image
# import piexif
#
# im = Image.open("D://temp//1.jpg")
# exif_dict = piexif.load(im.info["exif"])
#
# print(type(exif_dict), exif_dict)
#
# for ifd in ("0th", "Exif", "GPS", "1st"):
#     for tag in exif_dict[ifd]:
#         print(piexif.TAGS[ifd][tag], exif_dict[ifd][tag])
# exif_dict["0th"][piexif.ImageIFD.Artist] = "中国科技".encode()
# exif_dict["Exif"][piexif.ExifIFD.DateTimeOriginal] = '9999:09:09 09:09:09'.encode()
# # print(exif_dict["GPS"][piexif.ImageIFD])
# exif_bytes = piexif.dump(exif_dict)
# print(type(exif_dict), exif_dict)
# im.save("D://temp//hint2.jpg", exif=exif_bytes)
# print('------------------------------修改后-----------------------------------')
# for ifd in ("0th", "Exif", "GPS", "1st"):
#     for tag in exif_dict[ifd]:
#         print(piexif.TAGS[ifd][tag], exif_dict[ifd][tag])


import io
import piexif
from PIL import Image

# 读取图片并创建缩略图
bytesIO = io.BytesIO()
thumb_im = Image.open('D://temp//1.jpg')
thumb_im.thumbnail((50, 50), Image.ANTIALIAS)
thumb_im.save(bytesIO, 'jpeg')
thumbnail = bytesIO.getvalue()

# 编辑EXIF数据
zeroth_ifd = {
    piexif.ImageIFD.Make: '中国'.encode(),
    piexif.ImageIFD.XResolution: (300, 1),
    piexif.ImageIFD.YResolution: (300, 1),
    piexif.ImageIFD.Software: '中国'.encode(),
    piexif.ImageIFD.Artist : "中国科技".encode(),
    piexif.ImageIFD.Copyright: "中国科技".encode()
}
exif_ifd = {
    piexif.ExifIFD.DateTimeOriginal: '2099:09:29 10:10:10',
    piexif.ExifIFD.LensMake: "中国科技".encode(),
    piexif.ExifIFD.Sharpness: 65535,
    piexif.ExifIFD.LensSpecification: ((1, 1), (1, 1), (1, 1), (1, 1)),
}
gps_ifd = {
    piexif.GPSIFD.GPSVersionID: (2, 0, 0, 0),
    piexif.GPSIFD.GPSAltitudeRef: 1,
    piexif.GPSIFD.GPSDateStamp: '1999:99:99 99:99:99',
}
first_ifd = {
    piexif.ImageIFD.Make: "中国科技".encode(),
    piexif.ImageIFD.XResolution: (40, 1),
    piexif.ImageIFD.YResolution: (40, 1),
    piexif.ImageIFD.Software: "中国科技".encode()
}

# 保存
exif_dict = {'0th': zeroth_ifd, 'Exif': exif_ifd, 'GPS': gps_ifd, '1st': first_ifd, 'thumbnail': thumbnail}
exif_bytes = piexif.dump(exif_dict)
im = Image.open('D://temp//1.jpg')
im.save('D://temp//hint2.jpg', exif=exif_bytes)

# 读取EXIF
exif_dict = piexif.load('D://temp//hint2.jpg')
for k, v in exif_dict.items():
    print(k, v)
# 0th {271: b'Canon', 282: (96, 1), 283: (96, 1), 305: b'piexif', 34665: 115, 34853: 226}
# Exif {36867: b'2099:09:29 10:10:10', 41994: 65535, 42034: ((1, 1), (1, 1), (1, 1), (1, 1)), 42035: b'LensMake'}
# GPS {0: (2, 0, 0, 0), 5: 1, 29: b'1999:99:99 99:99:99'}
# Interop {}
# 1st {271: b'Canon', 282: (40, 1), 283: (40, 1), 305: b'piexif', 513: 391, 514: 1556}
# thumbnail b'……'

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值