python 对图片增加边框,logo贴图,获取图片exif参数,填写图片文本内容

完整代码

python 复制代码
# 找到个可以下载免费字体的网站https://font.chi删除我naz.com/mi删除我anfei.html
from PIL import Image, ImageDraw, ImageFont
import exifread

def photo_exif(image_path):

    f = open(image_path, 'rb')

    tags = exifread.process_file(f)

    # 打印所有照片信息,会以键值对的方法保存
    # for tag in tags.keys():
    #     print("Key: {0}, value {1}".format(tag, tags[tag]))
    # print(str(tags['EXIF FocalLength']) + 'mm', tags['EXIF ExposureTime'], 'ISO' + str(tags['EXIF ISOSpeedRatings']))
    return tags



def add_logo_with_text(image_path, logo_path, logo_size, text1, text2, text3, font_path, font_size, font_color, border_size,
                       border_color, output_path):
    # 打开原始图片
    image = Image.open(image_path).convert("RGB")
    width, height = image.size

    # 计算边框区域大小和位置
    font = ImageFont.truetype(font_path, font_size)
    text1_width, text1_height = font.getsize(text1)
    text2_width, text2_height = font.getsize(text2)
    text3_width, text3_height = font.getsize(text3)
    text_width = max(text1_width, text2_width, text3_width)
    text_height = text1_height + text2_height + text3_height
    border_width = logo_size[0] + text_width + border_size * 3
    border_height = max(logo_size[1], text_height) + border_size * 2
    border_position = ((width - border_width) // 2, height)

    # 打开logo图片并调整大小
    logo = Image.open(logo_path).resize(logo_size, Image.ANTIALIAS)

    # 创建新的图片
    new_width = width
    new_height = height + border_height
    new_image = Image.new("RGB", (new_width, new_height), "white")

    # 将原始图片复制到新图片的顶部
    new_image.paste(image, (0, 0, width, height))

    # 在新图片上绘制边框
    draw = ImageDraw.Draw(new_image)
    border_rect = (border_position[0], height, border_position[0] + border_width, height + border_height)
    draw.rectangle(border_rect, fill=None, outline=border_color, width=border_size)

    # 在边框区域内绘制logo图片
    logo_position = (border_position[0] + border_size, height + (border_height - logo_size[1]) // 2)
    new_image.paste(logo, logo_position)

    # 在边框区域内绘制文本
    text1_position = (border_position[0] + border_size * 2 + logo_size[0], height + (border_height - text_height) // 2)
    text2_position = (border_position[0] + border_size * 2 + logo_size[0], text1_position[1] + text1_height)
    text3_position = (border_position[0] + border_size * 2 + logo_size[0], text2_position[1] + text2_height)
    draw.text(text1_position, text1, font=font, fill=font_color)
    draw.text(text2_position, text2, font=font, fill=font_color)
    draw.text(text3_position, text3, font=font, fill=font_color)

    # 保存合成后的图片
    new_image.save(output_path)


# 示例用法
# 照片路径
image_path = "DSC_1966.jpg"
# logo图片路径
logo_path = "2.png"
# logo图片大小
logo_size = (255, 255)
# 图片信息
tags = photo_exif(image_path)
text1 = "Power For."+str(tags['Image Model'])+"     "+"FL."+str(tags['EXIF FocalLength'])+"mm"+"     "+"EB."+str(tags['EXIF ExposureTime'])+"     "+"ISO."+str(tags['EXIF ISOSpeedRatings'])+"     "+"WL."+str(tags['EXIF ExifImageWidth'])+" x "+str(tags['EXIF ExifImageLength'])
text2 = "DtO." + str(tags['EXIF DateTimeOriginal']) + "     " + "By.林俊杰裤子掉了"
text3 = "尼康,  感动常在 ╰( ̄▽ ̄)╭"
# 字体路径
font_path = "siyuanyuanti.ttf"
font_size = 55
font_color = (0, 0, 0)  # 黑色
border_size = 55
border_color = (255, 255, 255)  # 白色
# 输出照片 .后缀为png为无损图片 ,jpg为压缩后的图片
output_path = "output_image.png"

add_logo_with_text(image_path, logo_path, logo_size, text1, text2, text3, font_path, font_size, font_color, border_size,
                   border_color, output_path)
print("图片已保存至:", output_path)

输出结果

效果图

可自行写成tk界面化选择图片处理,及处理多张图片的功能

相关推荐
西猫雷婶22 分钟前
python学opencv|读取图像(二十一)使用cv2.circle()绘制圆形进阶
开发语言·python·opencv
老刘莱国瑞1 小时前
STM32 与 AS608 指纹模块的调试与应用
python·物联网·阿里云
一只敲代码的猪2 小时前
Llama 3 模型系列解析(一)
大数据·python·llama
Hello_WOAIAI2 小时前
批量将 Word 文件转换为 HTML:Python 实现指南
python·html·word
winfredzhang2 小时前
使用Python开发PPT图片提取与九宫格合并工具
python·powerpoint·提取·九宫格·照片
矩阵推荐官hy147623 小时前
短视频矩阵系统种类繁多,应该如何对比选择?
人工智能·python·矩阵·流量运营
测试19983 小时前
外包干了2年,技术退步明显....
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
码银3 小时前
【python】银行客户流失预测预处理部分,独热编码·标签编码·数据离散化处理·数据筛选·数据分割
开发语言·python
小木_.3 小时前
【python 逆向分析某有道翻译】分析有道翻译公开的密文内容,webpack类型,全程扣代码,最后实现接口调用翻译,仅供学习参考
javascript·python·学习·webpack·分享·逆向分析
R-sz3 小时前
14: curl#6 - “Could not resolve host: mirrorlist.centos.org; 未知的错误“
linux·python·centos