Python修改图片Exif属性

发布时间 2023-08-18 18:24:48作者: 星河赵
Exif属性 包括

EXIF_TAG_ARTIST (0x013B): 图像的作者信息。
EXIF_TAG_COPYRIGHT (0x8298): 版权信息。
EXIF_TAG_DATETIME (0x0132): 原始图像的创建日期和时间。
EXIF_TAG_IMAGE_DESCRIPTION (0x010E): 图像的文字描述。
EXIF_TAG_MAKE (0x010F): 制造商/品牌信息。
EXIF_TAG_MODEL (0x0110): 相机或设备型号。
EXIF_TAG_ORIENTATION (0x0112): 图像的方向。
EXIF_TAG_SOFTWARE (0x0131): 创建或编辑图像的软件名称。
EXIF_TAG_EXPOSURE_TIME (0x829A): 曝光时间。
EXIF_TAG_FNUMBER (0x829D): 光圈值。
EXIF_TAG_ISO_SPEED (0x8827): ISO感光度。
EXIF_TAG_FOCAL_LENGTH (0x920A): 焦距。
EXIF_TAG_GPSINFO (0x8825): 包含GPS信息的子字段。
EXIF_TAG_USER_COMMENT (0x9286): 用户评论。
EXIF_TAG_FLASH (0x9209): 闪光灯状态。
EXIF_TAG_WHITE_BALANCE (0xA403): 白平衡模式。
EXIF_TAG_GPS_LATITUDE (0x0002): 纬度值。
EXIF_TAG_GPS_LONGITUDE (0x0004): 经度值。
EXIF_TAG_GPS_ALTITUDE (0x0006): 海拔高度。
EXIF_TAG_GPS_DATESTAMP (0x001D): GPS日期。
EXIF_TAG_GPS_TIMESTAMP (0x0007): GPS时间戳。

 

 
def add_exif_data(photo_path=None, photo_data=None):
    """
    Args:
        photo_path:
        photo_data:

    Returns:

    """
    if photo_path:
        image = Image.open(photo_path)
    elif photo_data:
        image_stream = BytesIO(photo_data)
        image = Image.open(image_stream)
    else:
        return False

    exif_stream = BytesIO()
    # 获取Exif数据
    exif_data = image.getexif()
    # 定义新的Exif作者信息
    new_artist = "一天一点".encode("utf-8")
    new_software = "做图吧".encode("utf-8")

    # 定义Exif标签常量
    EXIF_TAG_ARTIST = 0x013B  # Exif的Artist标签  作者
    EXIF_TAG_SOFTWARE = 0x0131  # Exif的Software标签 程序名称

    # 创建新的Exif数据字典
    new_exif_data = {
        EXIF_TAG_ARTIST: new_artist,
        EXIF_TAG_SOFTWARE: new_software
    }

    # 更新Exif数据
    if exif_data is not None:
        for tag, value in new_exif_data.items():
            exif_data[tag] = value

        # 将更新后的Exif数据写回图像
        image.save(exif_stream, "JPEG", exif=exif_data)
    else:
        # 如果没有Exif数据,创建新的Exif数据并保存
        exif_data = new_exif_data
        image.save(exif_stream, "JPEG", exif=exif_data)

    # image.save("/tmp/2221212121.jpg", exif=exif_data)
    return exif_stream.getvalue()


if __name__ == "__main__":
    # add_watermark("/tmp/1234.jpeg")
    r = add_exif_data("/tmp/111234.jpg", photo_data=None)
    print(r)