Out of boredom, I spent half an hour writing (copying) a script that automatically adds watermarks to photos. Its basic function is to add the time, dimensions, GPS information (when available from a drone or phone), and copyright information to the lower-right corner of a selected photo. It is still far from complete; when I have time, I will add support for reading every JPG in a directory and for adapting the font size automatically.
import os
from PIL import Image
from PIL.ExifTags import TAGS
from PIL import ImageFont
from PIL import ImageDraw
def get_exif_data(fname):
"""Get embedded EXIF data from image file."""
ret = {}
try:
img = Image.open(fname)
if hasattr( img, '_getexif' ):
exifinfo = img._getexif()
if exifinfo != None:
for tag, value in exifinfo.items():
decoded = TAGS.get(tag, tag)
ret[decoded] = value
size = img.size
except IOError:
print('IOERROR ' + fname)
return ret,size
def addText(fname,text):
img = Image.open(fname)
draw = ImageDraw.Draw(img)
# font = ImageFont.truetype(<font-file>, <font-size>)
font = ImageFont.truetype("Andale.ttf", 64)
# draw.text((x, y),"Sample Text",(r,g,b))
draw.text((img.size[0]-img.size[0]/6,img.size[1]-img.size[1]/10),text,(255,255,255),font=font)
img.save('sample-out.jpg')
print('Added text')
if __name__ == '__main__':
fileName = r'/Users/li-yang/Desktop/DSC04467_1.jpg'
copyright = 'Photo by YangLi'
exif,size = get_exif_data(fileName)
print(exif)
size = str(size[0]) +'*'+ str(size[1])
if 'DateTimeOriginal' in exif:
time = exif['DateTimeOriginal']
else:
time= 'No Time Info'
if 'Model' in exif:
model = exif['Model']
else:
model = 'No Model Info'
if 'GPSInfo' in exif:
GPS = exif['GPSInfo']
else:
GPS = 'No GPS Info'
text = time +'\n' + size +'\n' +GPS+'\n' +copyright
addText(fileName,text)