原图:
添加边框后:
添加边框会读取照片的exif信息如时间、相机型号、品牌以及快门焦段等信息,将他们显示在下面的边框中。
获取当前py文件路径
import os
#get path that py file located
def Get_Currentpath():
file_path = os.path.abspath(__file__)
dir_path = os.path.dirname(file_path)
return dir_path
弹窗获取所选择文件路径
如下图使用tkinter库掉出弹窗选择指定图片,并获取所选择图片的绝对路径
import tkinter
#get file path that choosed
def Get_FilePath():
root = tkinter.Tk()
root.withdraw()
f_path = filedialog.askopenfilename()
return f_path
弹窗获取用户所选择的保存路径
将处理后的图片存储到所选的路径并指定文件名
def save_filePath():
# 创建文件对话框
root = tkinter.Tk()
root.withdraw()
# 弹出保存文件对话框
file_path = filedialog.asksaveasfilename(defaultextension=".jpg", filetypes=[("JPG File", "*.jpg"), ("PNG file","*.png"),("All Files", "*.*")])
print(file_path)
# 如果用户选择了文件路径,则返回路径
if file_path:
return file_path
else:
pass
创建文字图片
def createfond(size=160,str=' ',color=(0,0,0)):
lopath = Get_Currentpath()
fondpath = lopath+r'\material\方正楷体简体.TTF'
dignum=0
alphanum=0
othernum=0
for i in str:
if i.isdigit():
dignum+=1
elif i.isalpha():
alphanum+=1
else:
othernum+=1`在这里插入代码片`
othernum = len(str)-dignum
x=int(dignum*size*0.6)+int(alphanum*size*0.6)+int(othernum*size*0.5)
y=int(size*1.2)
img = Image.new("RGBA",(x,y),'white')
draw = ImageDraw.Draw(img)#创建一个绘画对象
fnt = ImageFont.truetype(fondpath,size)
draw.text((0,0),str,fill=color,font=fnt)
#img.show()
return img,x,y
获取字体ttf文件路径
fondpath = lopath+r'\material\方正楷体简体.TTF'
计算文字所占用的空间大小从而生成合适大小的image图像
x=int(dignum*size*0.6)+int(alphanum*size*0.6)+int(othernum*size*0.5)
y=int(size*1.2)
img = Image.new("RGBA",(x,y),'white')
使用imageDraw 和 ImageFont方法在image图像上写文本
from PIL import Image
from PIL import ImageFont
from PIL import ImageDraw
draw = ImageDraw.Draw(img)#创建一个绘画对象
fnt = ImageFont.truetype(fondpath,size)
draw.text((0,0),str,fill=color,font=fnt)
生成文字图片如下
最后返回的是处理好的文本图像变量和图像的长和高
return img,x,y
创建边框
#creat the border
def CreateBorder(logopath,color = (255,255,255)):
Src_path = Get_FilePath()
pictype = picturetype.picturesize.size_16_9
img = Image.open(Src_path)
#get exif data
exif_dict = piexif.load(Src_path)
exif_bytes = piexif.dump(exif_dict)
exif_mes = img._getexif()
# 获取时间信息
if "Exif" in exif_dict:
exif_data = exif_dict["Exif"]
#拍摄日期
if piexif.ExifIFD.DateTimeOriginal in exif_data:
datetime_original_0 = str(exif_data[piexif.ExifIFD.DateTimeOriginal].decode("utf-8"))
#print("DateTimeOriginal:", datetime_original)
datetime_original = datetime_original_0.replace(':','.',2)
datetime_original = datetime_original[0:10]
print(datetime_original)
else:
datetime_original = ' '
#焦距
if piexif.ExifIFD.FocalLength in exif_data:
FocalLength = str(int(exif_data[piexif.ExifIFD.FocalLength][0]/100))+"mm"
#print("focal length:",FocalLength)
else:
FocalLength = ' '
#ISO
if piexif.ExifIFD.ISOSpeedRatings in exif_data:
ISO = 'ISO'+str(exif_data[piexif.ExifIFD.ISOSpeedRatings])
#print("ISO:",ISO)
else:
ISO = ' '
#快门时间
if piexif.ExifIFD.ExposureTime in exif_data:
exposure_time = exif_data[piexif.ExifIFD.ExposureTime]
shutter_speed = exposure_time[0] / exposure_time[1]
shutter_speed = int(1/shutter_speed)
shutter_speed = '1/'+str(shutter_speed)+'s'
else:
shutter_speed = ' '
#光圈
if piexif.ExifIFD.FNumber in exif_data:
f_number = exif_data[piexif.ExifIFD.FNumber]
fnumber = 'f/'+str(int(f_number[0] / f_number[1]))
#print("光圈",fnumber)
else:
fnumber = ' '
#镜头品牌
if piexif.ExifIFD.LensMake in exif_data:
lensmaker = exif_data[piexif.ExifIFD.LensMake].decode("utf-8")
#print('镜头品牌:',lensmaker)
else:
lensmaker = ' '
#镜头型号
if piexif.ExifIFD.LensModel in exif_data:
lensmodel = exif_data[piexif.ExifIFD.LensModel].decode("utf-8")
#print("镜头型号",lensmodel)
else:
lensmodel = ' '
camera_model = str(exif_dict[