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界面化选择图片处理,及处理多张图片的功能

相关推荐
xiaohanbao091 小时前
Transformer架构与NLP词表示演进
python·深度学习·神经网络
love530love2 小时前
【笔记】 Podman Desktop 中部署 Stable Diffusion WebUI (GPU 支持)
人工智能·windows·笔记·python·容器·stable diffusion·podman
程序员晚枫2 小时前
Python 3.14正式发布!这5大新特性太炸裂了
python
先做个垃圾出来………2 小时前
SortedList
python
这里有鱼汤2 小时前
从DeepSeek到Kronos,3个原因告诉你:Kronos如何颠覆传统量化预测
后端·python·aigc
晓宜3 小时前
Java25 新特性介绍
java·python·算法
深栈3 小时前
机器学习:决策树
人工智能·python·决策树·机器学习·sklearn
MediaTea3 小时前
Python:匿名函数 lambda
开发语言·python
hui函数3 小时前
Python全栈(基础篇)——Day07:后端内容(函数的参数+递归函数+实战演示+每日一题)
后端·python
MYX_3094 小时前
第二章 预备知识(线性代数)
python·线性代数·机器学习