【python初学者日记】用PIL批量给HEIC格式的照片,添加拍摄日期、拍摄地点的水印戳
最近在整理手机相册,发现以前在拍摄的时候,不喜欢给照片带水印,现在想在照片上面打上拍摄时间+地点的水印戳。之前有写过将exl中的内容,添加到照片的功能,所以这次的就简单多了。
问题合集
1、读取 HEIC 格式照片的拍摄信息
2、将已知坐标转码成具体省市地址的文字信息
3、将文字添加到HEIC格式的照片上
问题解决
一、问题分析
-
1、读取HEIC格式照片的拍摄信息:
- 现有版本python3.11,用exifread库即可将苹果导出的HEIC格式照片的拍摄信息。 2、将已知坐标转码成具体省市地址的文字信息:
-
这里我使用的是百度地图调起API,参考说明如图:
传送门: https://lbsyun.baidu.com/index.php?title=uri/api/web
注:此方法无需注册开发者,可以直接使用。
3、将文字添加到HEIC格式的照片上: - 这里偷个懒,我之前有写过将exl中的内容,添加到照片的功能,此处稍作修改即可实现功能。
二、代码实现
1、代码如下:
# -*- coding: utf-8 -*-
# 读取图片属性中的拍摄日期,并给图片添加拍摄日期、地点
import datetime
import os
import exifread
import requests
import json
from PIL import Image, ImageDraw, ImageFont, ImageFilter
from pillow_heif import register_heif_opener
register_heif_opener()
# 示例已知经纬度,利用百度地图,输出当前省市等信息
# http://api.map.baidu.com/geocoder?location=30.204891666666665,120.19970833333333&coord_type=gcj02&output=json
my_font = r"C:\Windows\Fonts\SIMYOU.TTF"
startTime_program = datetime.datetime.now() # 开始时间
# 定义一个换算函数,功能:将输入的度(时)分秒,经过换算,返回度(时)。例如输入[30, 12, 1761/100],返回30.204891666666665
def Conversion(data):
temp_data = [ele.strip() for ele in (str(data).replace('[', '').replace(']', '').split(','))]
new_data = eval(temp_data[-1]) /