通过Python的PIL库给图片添加图片水印

文章目录

  • 前言
  • 一、素材准备
    • 1.原图
    • 2.水印图
  • 二、使用PIL库给图片添加图片水印
    • 1.引入库
    • 2.定义图片路径
    • 3.打开原图
    • 4.打开水印图片
    • 5.计算水印图片大小
    • 6.计算原图大小
    • 7.调整水印图片大小
      • 7.1调整前
      • 7.2调整后
    • 8.计算水印图片位置
      • 8.1左上
      • 8.2左下
      • 8.3右上
      • 8.4右下
      • 8.5中间
    • 9.添加水印
    • 10.保存新图
  • 总结


前言

大家好,我是空空star,本篇给大家分享一下通过Python的PIL库给图片添加图片水印。
上一篇已经介绍过了PIL库是什么?安装PIL 、查看PIL版本,这里就不再介绍了。


一、素材准备

1.原图

2.水印图

这里我去C站首页找了一个,看起来是不是很酷。

二、使用PIL库给图片添加图片水印

1.引入库

from PIL import Image

2.定义图片路径

local = '/Users/kkstar/Downloads/video/pic/'

3.打开原图

img = Image.open(local+'demo.jpg')

4.打开水印图片

watermark = Image.open(local+'csdn.png')

5.计算水印图片大小

wm_width, wm_height = watermark.size

6.计算原图大小

img_width, img_height = img.size

7.调整水印图片大小

7.1调整前

7.2调整后

wm_width = int(wm_width*1.5)
wm_height = int(wm_height*1.5)
watermark = watermark.resize((wm_width, wm_height))

8.计算水印图片位置

8.1左上

x = 5
y = 5

8.2左下

x = 5
y = img_height - wm_height - 5

8.3右上

x = img_width - wm_width - 5
y = 5

8.4右下

x = img_width - wm_width - 5
y = img_height - wm_height - 5

8.5中间

x = int((img_width - wm_width)/2)
y = int((img_height - wm_height)/2)

其他位置通过调整计算x、y的值即可。

9.添加水印

img.paste(watermark, (x, y), watermark)

10.保存新图

img.save(local+'result.jpg')

总结

  1. 使用PIL库打开需要添加水印的图片,可以使用open()函数。
  2. 使用PIL库打开水印图片,得到水印图像。可以使用上述同样的方式打开水印图片。
  3. 将水印图片添加到原始图片上,可以使用paste()函数。
  4. 保存添加水印后的图片,可以使用save()函数。

image.size:返回一个包含图片尺寸(宽度和高度)的元组。例如,对于一个400x300像素的图片,该方法返回(400, 300)。通过调用image.size方法,可以获取图像的大小信息并进行后续处理。
image.resize:可以用来调整图像的尺寸大小,同时还可以使用不同的插值方法来处理像素。通过指定待处理的图像尺寸和插值方法,可以实现对图像的缩放、裁剪、旋转等各种形式的变换。resize方法的语法为:image.resize(size, resample=None),其中size是一个二元组,表示新的图像尺寸,resample是插值方法,默认为None,表示使用最近邻插值。
image.paste:用于将一个图像粘贴到另一个图像上面,可以将水印图片嵌入到目标图片中。第9步中,第一个传入的是要粘贴的图像,第二个传入的是粘贴图像的左上角的坐标,第三个参数是要粘贴的图像的遮罩。
image.save:用于将图像保存为文件,可以指定图像格式、质量、压缩等参数。该方法支持多种图像格式,包括JPG、PNG、BMP等。同时可以通过参数来进行格式转换、大小调整等操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/16882.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Doris(20):Doris的函数—数学函数

1 查看函数名 show builtin functions in test_db; 2 abs(double a) 功能: 返回参数的绝对值 返回类型:double类型 使用说明:使用该函数需要确保函数的返回值是整数。 3 acos(double a) 功能: 返回参数的反余弦值 返回类型:double类型 MySQL 中反余弦函数 ACOS(…

数据库基础及用户管理授权

数据库概念 关系型数据库 数据结构二维表格 库 -> 表 -> 列(字段):用来描述对象的的一个属性;行:用来描述一个对象的信息 mysql(5.7/8.0) maridb ocracle postgresql sqlserver(windows…

196页11万字智慧水务平台建设方案

本资料来源公开网络,仅供个人学习,请勿商用,如有侵权请联系删除。 业务需求分析 3.1 主要业务描述 (1)调度中心主要业务描述 配套工程调度中心为一级调度机构,同时也是水务集团原水供水的统一调度中心。…

Iron Web Scraper 2023.4.13 Crack

Iron Web Scraper 被认为是 C# 的互联网抓取库,它能够让用户和开发者激发和最终的个人浏览行为,以提取文件、内容甚至图片和应用程序。动词作为 .NET 的本机项。IronWebScraper 具有从后台处理礼貌和多线程进程的能力,这使得用户程序很容易简…

SpringCloud学习(七)——统一网关Gateway

文章目录 1. 网关介绍2. 网关搭建2.1 引入依赖2.2 创建启动类2.3 编写配置2.4 测试 3. 路由断言工厂4. 路由过滤器4.1 过滤器配置4.2 全局过滤器4.3 过滤器执行顺序 5. 跨域问题处理 1. 网关介绍 到现在,我们可以使用Nacos对不同的微服务进行注册并管理配置文件&am…

天气预报查询 API 提供个性化的天气服务的设计思路

引言 假设你是一个开发人员或公司,正在考虑开发一款天气应用程序,但你意识到市场上已经有很多竞争者在使用天气预报查询 API 来提供类似的服务,本文将一起探寻一些创新的方法来提高应用程序的竞争力。 扩大竞争力的一些建议 如果市面上已经…

Redis主从复制和哨兵模式

Redis主从复制 概念 主从复制,是指将一台Redis服务器的数据,复制到其他的Reds服务器。前者称为主节点(master / leader),后者称为从节点(slave / follower)。 数据的复制是单向的,只能由主节点到从节点。 Master以写为主,Slave…

spring2:创建和使用

目录 1.创建Spring项目 1.1创建Maven类 1.2添加Spring支持框架 1.3添加启动类 2.存储Bean对象 2.0 spring项目中添加配置文件(第一次) 2.1创建Bean 2.2把Bean注册到容器中 3.获取并使用Bean对象 3.1创建上下文 3.2获取指定Bean对象 getBean()方法 --> 获取什么…

Flutter 组件抽取:日期(DatePicker)、时间(TimePicker)弹窗选择器【仿照】

简介 仿照《Flutter 仿ios自定义一个DatePicker》实行的日期弹窗选择器&#xff08;DatePicker&#xff09;、时间弹窗选择器&#xff08;TimePicker&#xff09; 效果 范例 class _TestPageState extends State<TestPage> {overridevoid initState() {super.initStat…

ros基础笔记

1创建工作空间 catkin_init_workspace 将文件夹初始化成ros文件 编译工作空间catkin_make vi ~/.bashrc 加入环境变量bashrc一下在任何终端都生效 catkin_create_pkg learning_communication通讯机制 std_msgs数据结构 rospy roscpp catkin_create_pkg mbot_description ur…

SpringBoot实现导出Excel功能

1 问题背景 需求要做一个导出excel的功能 2 前言 本篇着重阐述后端怎么实现&#xff0c;前端实现的部分只会粗略阐述。该实现方案是经过生产环境考验的&#xff0c;不是那些拿来练手的小demo。本文阐述的方案可以借鉴用来做毕设或者加到自己玩的项目中去。再次声明&#xff0c;…

题目 3166: 蓝桥杯2023年第十四届省赛真题-阶乘的和--不能完全通过,最好情况通过67.

原题链接&#xff1a; 题目 3166: 蓝桥杯2023年第十四届省赛真题-阶乘的和 https://www.dotcpp.com/oj/problem3166.html 致歉 害&#xff0c;首先深感抱歉&#xff0c;这道题还是没有找到很好的解决办法。目前最好情况就是67分。 这道题先这样跳过吧&#xff0c;当然以后还…

day9 实现UDP通信

目录 socket函数拓展 UDP通信实现过程 代码实现 socket函数拓展 send与recv函数&#xff1a; /*用于发送数据*/ ssize_t send(int sockfd, const void *buf, size_t len,int flags);/*用于接收数据*/ ssize_t recv(int sockfd, void *buf, size_t len,int flags);/*前三个…

【Python习题集5】函数的设计

函数的设计 一、实验内容二、实验总结 一、实验内容 1.编写两个函数分别按单利和复利计算利息&#xff0c;根据本金、年利率、存款年限得到本息和和利息。调用这两个函数计算1000元在银行存3年&#xff0c;在年利率是6%的情况下&#xff0c;单利和复利分别获得的本息和和利息。…

程序员不得不知道的 API 接口常识

1、初识 API 接口 记得在我初学 web 开发的时候&#xff0c;后端框架相关的教程基本都会教学生写渲染模版&#xff08;不分语言&#xff09;&#xff0c;也就是说后端返回的是整个网页的数据&#xff0c;浏览器只负责渲染。 一般这类模版在后端都会对应一个路由&#xff0c;比…

Vue——组合式函数

目录 什么是“组合式函数”&#xff1f;​ 鼠标跟踪器示例​ 异步状态示例​ 约定和最佳实践​ 命名​ 输入参数​ 返回值​ 副作用​ 使用限制​ 通过抽取组合式函数改善代码结构 选项式 API 中使用组合式函数​ 与其他模式的比较​ 和 Mixin 的对比​ 和无渲染…

计算机视觉的应用3-批量图片风格迁移之素描图片生成的应用

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下计算机视觉的应用3-批量图片生成素描图片的应用&#xff0c;将一张图像转换为素描风格的图像的其实是模拟了人类视觉在观察物体时受到的光照条件。素描风格的图像在灰度值上表现出明暗交替的效果&#xff0c;这种效…

渗透测试 | 目录扫描

0x00 免责声明 本文仅限于学习讨论与技术知识的分享&#xff0c;不得违反当地国家的法律法规。对于传播、利用文章中提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;本文作者不为此承担任何责任&#xff0c;一旦造成后果请自行承担…

electron源码保护

electron 程序发布后&#xff0c;如果未对程序做保护&#xff0c;则极容易受到破坏&#xff0c;比如被轻松破解密码&#xff0c;或者被修改程序&#xff0c;所以必须对程序做一些安全防护。虽然没有100%的安全防护&#xff0c;但是提升破解难度&#xff0c;直至破解代价超出了范…

MyBatis:使用代码整合

文章目录 MyBatis&#xff1a;Day 04框架1. 依赖&#xff1a;pom.xml2. 外部配置文件&#xff1a;db.properties3. 核心配置文件&#xff1a;mybatis-config.xml4. 实体类5. 接口&#xff1a;xxxMapper.java6. 实现类&#xff1a;xxxMapper.xml7. 测试 MyBatis&#xff1a;Day …