python给图片加上图片水印

python给图片加上图片水印

  • 作用
  • 效果
  • 代码

作用

  1. 给图片加上图片水印
  2. 图片水印的透明度,位置可自定义

效果

原始图片:
在这里插入图片描述

水印图片:
在这里插入图片描述

添加水印后的图片:
在这里插入图片描述

代码

from PIL import Image, ImageDraw, ImageFont


def add_watermark(input_image_path, watermark_image_path, output_image_path, position=(0.5, 0.5), opacity=0.5):
    """
    在图片上添加水印

    :param input_image_path: 输入图片路径
    :param watermark_image_path: 水印图片路径
    :param output_image_path: 输出图片路径
    :param position: 水印位置,默认为图片中心 (x, y) 坐标值在0到1之间
    :param opacity: 水印的不透明度,1为完全不透明,0为完全透明
    :return: None
    """
    base_image = Image.open(input_image_path).convert("RGBA")
    watermark = Image.open(watermark_image_path).convert("RGBA")

    # 获取图片尺寸
    base_width, base_height = base_image.size
    watermark_width, watermark_height = watermark.size

    # 计算水印位置
    left = int(base_width * position[0] - watermark_width / 2)
    top = int(base_height * position[1] - watermark_height / 2)

    # 限制水印位置在图片内
    left = max(0, left)
    top = max(0, top)
    right = min(base_width, left + watermark_width)
    bottom = min(base_height, top + watermark_height)

    # 调整水印图片大小以适应新的位置,并使用抗锯齿滤波器
    watermark = watermark.resize((right - left, bottom - top), Image.LANCZOS)

    # 在水印图片上应用透明度
    # 注意:这里我们假设水印图片已经有了一个alpha通道,否则需要另外处理
    # 我们通过创建一个新的RGBA图片,并用水印图片和其alpha值来填充它,然后调整alpha值来改变不透明度
    watermark_rgba = Image.new('RGBA', watermark.size, (255, 255, 255, int(255 * opacity)))
    watermark_rgba.alpha_composite(watermark)

    # 将水印添加到原始图片上
    base_image.paste(watermark_rgba, (left, top), watermark_rgba)

    # 保存图片
    base_image.save(output_image_path)


# 使用示例
add_watermark('1.png', 'te.png', 'output_with_watermark.png')

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

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

相关文章

联盟 | 歌者 AIPPT X HelpLook携手,开启企业高效办公新时代

面对日益增长的工作负荷和追求效率优化的压力,企业知识的积累与传播显得愈发重要。如何系统化地沉淀员工与企业的知识精华?如何快速分享内外部知识?更重要的是,如何在获取这些知识后,迅速将其转化为精美的PPT&#xff…

抖店一件代发,从0到1操作全流程

我是王路飞。 先说明一点,新手不需要纠结抖店一件代发(即无货源模式)还能不能做的问题。 无货源只是前期帮助新手阶段的你进入到这个市场里来的一种方式,不是你长期做店的思路。 入门之后,基本就转型为有货源去玩了…

漫画|基于SprinBoot+vue的漫画网站(源码+数据库+文档)

漫画网站 目录 基于SprinBootvue的漫画网站 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 3用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大…

node 版本对应的 node-sass 版本号

当我们在项目中使用 node-sass 时,电脑的 node版本号一定要与 node-sass 版本号对应,不对应时下载就会报错 ❌问题?node-sass: Command failed. ✅解决方案,可能是node 跟 node-sass版本不一致 1、查询node版本 node -v &#…

RabbitMQ - SimpleMessageListenerContainer的实现逻辑

RabbitMQ - SimpleMessageListenerContainer的实现逻辑 Queue(队列):在 RabbitMQ 中用于存储消息的数据结构。生产者将消息发送到队列中,而消费者从队列中接收消息。 Connection(连接):连接是应…

Unity 实现心电图波形播放(需波形图图片)

实现 在Hierarchy 面板从2D Object 中新建一个Sprite,将波形图图片的赋给Sprite。 修改Sprite 的Sprite Renderer 组件中Draw Mode 为Tiled, 修改Sprite Renderer 的Size 即可实现波形图播放。 在Hierarchy 面板从2D Object 中新建一个Sprite Mask 并赋以遮罩图片…

【学习笔记】Windows GDI绘图(六)图形路径GraphicsPath详解(中)

上一篇【学习笔记】Windows GDI绘图(五)图形路径GraphicsPath详解(上)介绍了GraphicsPath类的构造函数、属性和方法AddArc添加椭圆弧、AddBezier添加贝赛尔曲线、AddClosedCurve添加封闭基数样条曲线、AddCurve添加开放基数样条曲线、基数样条如何转Bezier、AddEllipse添加椭圆…

2024年了, 你还不会使用node.js做压力测试?

前些天刷抖音,看到网传的Java继父,求人攻击压测他的网站,这不得摩拳擦掌。 所以今天来聊聊如何对自己的项目、接口进行压力测试。 压力测试的目的 首先, 绝对不是为了压测、攻击别人的网站为乐。 1、探索线上系统流量承载的极限&#xff…

python批发模块的调试之旅:从新手到专家的蜕变

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、调试技巧的重要性 二、批发模块调试的实战演练 1. 设置断点 2. 逐行执行代码 3. 观察…

安全风险 - 检测Android设备系统是否已Root

在很多app中都禁止 root 后的手机使用相关app功能,这种场景在金融app、银行app更为常见一些;当然针对 root 后的手机,我们也可以做出风险提示,告知用户当前设备已 root ,谨防风险! 最近在安全检测中提出了一…

【博主推荐】HTML5实现520表白、情人节表白模板源码

文章目录 1.设计来源1.1 表白首页1.2 甜蜜瞬间11.3 甜蜜瞬间21.4 甜蜜瞬间31.5 甜蜜瞬间41.6 甜蜜瞬间51.7 甜蜜瞬间61.8 永久珍藏 2.效果和源码2.1 页面动态效果2.2 页面源代码2.3 源码目录2.4 更多为爱表白源码 3.源码下载地址 作者:xcLeigh 文章地址:…

行业首发 | MS08067-SecGPT(送邀请码)

一、简介 MS08067-SecGPT基于LLM大模型技术专门为网络安全领域设计的智能助手,集问答、分析、工具为一体的对话式安全专家,支持可以创建多会话问答。目的是辅助用户完成网络安全相关的工作,学员通过问答方式体验到SecGPT所具备的威胁情报分…

mySql从入门到入土

基础篇 在cmd中使用MYSQL的相关指令: net start mysql // 启动mysql服务 net stop mysql // 停止mysql服务 mysql -uroot -p1234//登录MYSQL(-u为用户名-p为密码) //登录参数 mysql -u用户名 -p密码 -h要连接的mysql服务器的ip地址(默认1…

开源博客项目Blog .NET Core源码学习(25:App.Hosting项目结构分析-13)

本文学习并分析App.Hosting项目中后台管理页面的文章管理页面。   文章管理页面用于显示、检索、新建、编辑、删除文章数据,以便在前台页面的首页、文章专栏、文章详情页面显示文章数据。文章管理页面附带一新建及编辑页面,以支撑新建和编辑文章数据。…

智慧平安小区建设方案:EasyCVR视频+AI能力全面提升小区安全管理水平

随着城市化进程的加快和科技的不断发展,智慧平安小区建设成为了提升社区治理水平和居民安全感的重要手段。TSINGSEE青犀EasyCVR智慧平安小区平台采集汇总智慧小区各类视频资源基础数据,进行分级分类管理,并为公安、政法、大数据局、街道社区等…

从零开始:Spring Boot项目中如何集成并使用Infinispan

一、介绍 Infinispan 其实就是一个分布式缓存和数据网格平台,提供了高度可扩展和高性能数据缓存解决方案。Infinispan可以作为本地缓存或分布式缓存使用,支持事务、查询、处理大数据等功能。简单地说,Infinispan 可以理解为是 MySQL 的内存版…

docker容器安装nexus3以及nexus3备份迁移仓库数据

一、安装步骤 1.搜索nexus3镜像 docker search nexus3 2.拉取镜像 docker pull sonatype/nexus3或者指定版本 docker pull sonatype/nexus3:3.68.0 3.查看拉取的镜像 docker images | grep "nexus3" 4.启动nexus服务 直接启动 docker run -d --name nexus3 -…

优于InstantID!中山大学提出ConsistentID:可以仅使用单个图像根据文本提示生成不同的个性化ID图像

给定一些输入ID的图像,ConsistentID可以仅使用单个图像根据文本提示生成不同的个性化ID图像。效果看起来也是非常不错。 相关链接 Code:https://github.com/JackAILab/ConsistentID Paper:https://ssugarwh.github.io/consistentid.github.io/arXiv.pd…

Sentinel重要的前置知识

文章目录 1、雪崩问题及解决方案1.1、雪崩问题1.2、超时处理1.3、仓壁模式1.4、断路器1.5、限流1.6、总结 2、服务保护技术对比3、Sentinel介绍和安装3.1、初识Sentinel3.2、安装Sentinel 4、微服务整合Sentinel ​🍃作者介绍:双非本科大三网络工程专业在…

二叉树实战演练

目录 1.二叉树前序遍历---leetcode 思路 画图解析: 2.相同的树的判断 思路: 3.对称二叉树 思路分析: 4.另一棵树的子树 思路: 5.二叉树的便利---牛客网 建立二叉树的逻辑图: 总结: 1.…