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

本文主要是介绍python 对图片增加边框,logo贴图,获取图片exif参数,填写图片文本内容,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

完整代码

# 找到个可以下载免费字体的网站https://font.chi删除我naz.com/mi删除我anfei.html
from PIL import Image, ImageDraw, ImageFont
import exifreaddef 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 tagsdef 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_heightborder_width = logo_size[0] + text_width + border_size * 3border_height = max(logo_size[1], text_height) + border_size * 2border_position = ((width - border_width) // 2, height)# 打开logo图片并调整大小logo = Image.open(logo_path).resize(logo_size, Image.ANTIALIAS)# 创建新的图片new_width = widthnew_height = height + border_heightnew_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界面化选择图片处理,及处理多张图片的功能

这篇关于python 对图片增加边框,logo贴图,获取图片exif参数,填写图片文本内容的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/211697

相关文章

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

python获取网页表格的多种方法汇总

《python获取网页表格的多种方法汇总》我们在网页上看到很多的表格,如果要获取里面的数据或者转化成其他格式,就需要将表格获取下来并进行整理,在Python中,获取网页表格的方法有多种,下面就跟随小编... 目录1. 使用Pandas的read_html2. 使用BeautifulSoup和pandas3.

Python装饰器之类装饰器详解

《Python装饰器之类装饰器详解》本文将详细介绍Python中类装饰器的概念、使用方法以及应用场景,并通过一个综合详细的例子展示如何使用类装饰器,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. 引言2. 装饰器的基本概念2.1. 函数装饰器复习2.2 类装饰器的定义和使用3. 类装饰

Python 交互式可视化的利器Bokeh的使用

《Python交互式可视化的利器Bokeh的使用》Bokeh是一个专注于Web端交互式数据可视化的Python库,本文主要介绍了Python交互式可视化的利器Bokeh的使用,具有一定的参考价值,感... 目录1. Bokeh 简介1.1 为什么选择 Bokeh1.2 安装与环境配置2. Bokeh 基础2

SpringBoot UserAgentUtils获取用户浏览器的用法

《SpringBootUserAgentUtils获取用户浏览器的用法》UserAgentUtils是于处理用户代理(User-Agent)字符串的工具类,一般用于解析和处理浏览器、操作系统以及设备... 目录介绍效果图依赖封装客户端工具封装IP工具实体类获取设备信息入库介绍UserAgentUtils

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模