首页 > 编程语言 >Python修改图片Exif属性

Python修改图片Exif属性

时间:2023-08-18 18:34:26浏览次数:34  
标签:Exif EXIF exif Python photo TAG data 属性

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)

 




标签:Exif,EXIF,exif,Python,photo,TAG,data,属性
From: https://www.cnblogs.com/zhaoyingjie/p/17641264.html

相关文章

  • 【Python-每日技巧】python在linux中通过进程名称停止指定进程
    在CentOS下,你可以使用psutil库来杀死进程。以下是一个示例代码:importpsutil#设置要杀死的进程的名称process_name="your_process_name"#查找指定名称的进程并杀死forprocinpsutil.process_iter(['pid','name']):ifproc.info['name']==process_name:......
  • 总结python 元组和列表的区别
    python的基本类型中有元组和列表这么俩个,但是这哥俩却比较难于区分,今天就来用简单的实例说明两者的不同。列表:1.使用中括号([])包裹,元素值和个数可变实例:aaa=['sitename','www','pythontab','com']元组:1.使用中括号(())包裹,不可以被更改(尽管他们的内容可以)bbb=['sitename','www','py......
  • Python的参数
    Python的参数Python的参数包含三种,默认参数、可变参数、关键字参数默认参数默认参数允许你在调用函数时省略参数或者更新参数,在省略参数时,为你提供一个默认值示例1:defeat(food="baozi"):return"Eat,"+food+"."print(eat())#省略参数时,使用默认值Eat,baozi.......
  • python第八天
    作业1、1-8个数,2为排列,不重复的有多少个sum=0foriinrange(1,9):forjinrange(1,9):ifint(i)==int(j):sum=sumelse:sum=sum+1print(sum)2、99乘法表x=""foriinrange(1,10):forjinrange(1......
  • Python实现pdf转jpg
    自己电脑没找到软件用,想到python参考:https://zyicu.cn/?p=7656代码:(还可以调整分辨率)#-*-coding:utf-8-*-"""1、安装库pipinstallpymupdf2、直接运行"""importosimportfitzpdf_dir=[]defget_file():docunames=os.listdir()for......
  • python监控redis demo
    下载aioredis为了提升性能我们使用一部redispipinstallaioredisdemo:importasyncioimportaioredis#每隔10s获取redis信息asyncdefmonitor_redis(host,port,interval):#建立异步Redis连接redis_uri=f"redis://{host}:{port}"redis=awaitai......
  • python 利用imagezmq实现图片传输
    1.需求背景由于项目需求,需要在一个网页显示9个摄像头过算法的实时画面,项目初期,拟用ffmpeg实现二次推流过算法,后期由于ffmpeg仅能用于命令行命令,而且不易实现音频同步,故而使用ffmpeg进阶版pyav实现,后因pyav太占用服务器CPU性能,升级为将视频流的每一帧转为图片存入redis,前端实时从......
  • 使用 OpenCV Python 检测和可视化两个图像之间的差异
    使用OpenCVPython检测和可视化两个图像之间的差异转自:使用OpenCVPython检测和可视化两个图像之间的差异-Glasshost如果您需要比较两个图像并确定它们之间的差异,OpenCVPython提供了一种简单有效的方法来完成此任务。本指南将向您展示如何使用OpenCVPython检测和可视......
  • 必备Python代码段
    1.反转字符串以下代码使用Python切片操作来反转字符串。#Reversingastringusingslicingmy_string="ABCDE"reversed_string=my_string[::-1]print(reversed_string)#Output#EDCBA2.使用标题类(首字母大写)以下代码可用于将字符串转换为标题类。这是通过使用字符串类中......
  • python使用netmiko连接交换机绑定mac
    环境背景python3.8,华为交换机每次手动登录交换机再进行绑定操作,太过机械化啊,本着懒人原则,写一个脚本真不是事情脚本fromnetmikoimportConnectHandlerimporttimedefbing_mac(mac):sw_ip='10.10.10.10'#交换机ipusername='admin'#交换机账号......