使用pillow库为图片添加文件或者图片水印

下面是我们想要添加水印的图片:

图片水印:

效果图如下:

ps:对图片添加字体时,需指定字体文件,如 simsun.ttc

windows中在 C:\Windows\Fonts 路径下

linux中在 /usr/share/fonts 路径下,若不存在时需先去下载,linux中字体文件默认没有中文字体(最简单的方法,大家可以将windows中的字体文件复制到linux上的字体文件路径下)。

代码如下:

from PIL import Image, ImageFont, ImageDraw
import os


def image_add_watermark(image_path="", logo_path=""):
# 读取上传的图片
# image_file = request.files
# image_name = image_file.filename
# image = Image.open(io.BytesIO(image_file.read()))
image = Image.open(image_path)
image_name = 'xx.png'
# 降低像素
image = image.convert('RGBA').resize((image.width, image.height), Image.ANTIALIAS)
# 可以指定图片的保存路径
image_path = os.path.join('image_file', image_name)
image.save(image_path)

# 添加文字水印
add_watermark(image_path, '长情不羁的五年', 'simsun.ttc', font_size=150)
# 添加图片水印
# add_watermark_logo(image_path, logo_path)
print('执行完成》》》》》》》》》》》》')


def add_watermark(image_path, text, font_path, font_size=40, fill=(255, 255, 255, 128)):
"""
在图片上添加水印
:param image_path: 图片路径
:param text: 水印文本
:param font_path: 字体文件路径
:param font_size: 字体大小,默认为 40
:param fill: 水印颜色,默认为白色半透明
:return: None
"""
with Image.open(image_path) as image:
draw = ImageDraw.Draw(image)
width, height = image.size
font = ImageFont.truetype(font_path, font_size)
text_width, text_height = draw.textsize(text, font=font)
x = int((width - text_width) / 2)
y = int((height - text_height) / 2)
draw.text((x, y), text, font=font, fill=fill)
image.save(image_path)


def add_watermark_logo(image_path, logo_path):
"""
在图片上添加水印
:param image_path: 图片路径
:param logo_path: 水印路径
:return: None
"""
with Image.open(image_path) as image:
watermark = Image.open(logo_path).convert("RGBA").resize((image.width // 2, image.height // 3)) # 指定图片的大小
image.paste(watermark, (0, 0), watermark) # 添加的水印相对于图片的位置(x, y), 基于图片左上角
image.show()
image.save(image_path)


image_add_watermark('mm.jpg', 'logo.png')
 

使用PIL为图片添加水印的更多相关文章

  1. 【Python】给图片添加水印的Python及Golang实现

    前言 不知道大家有没有这样的习惯,一篇比较得意的博客在发表一段时间之后会特别关注,前段时间一篇写到凌晨的博客被 码迷 这个网关爬取之后发表了,因为搜索引擎先爬取码迷的,所以我的博客无法被搜索到,即使直 ...

  2. Python Windows 快捷键自动给剪贴板(复制)图片添加水印

    编写一个能在windows上使用的按下快捷键自动给剪贴板(复制)的图片添加水印的小工具.plyer.PIL.pyinstaller.pynput.win32clipboard库.记录自己踩过的坑,部分 ...

  3. Android 图片添加水印图片或者文字

    给图片添加水印的基本思路都是载入原图,添加文字或者载入水印图片,保存图片这三个部分 添加水印图片: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ...

  4. java实现给图片添加水印

    package michael.io.image; import java.awt.AlphaComposite; import java.awt.Graphics2D; import java.aw ...

  5. java.imageIo给图片添加水印

    最近项目在做一个商城项目, 项目上的图片要添加水印①,添加图片水印;②:添加文字水印; 一下提供下个方法,希望大家可以用得着: package com.blogs.image; import java ...

  6. ASP.NET -- WebForm -- 给图片添加水印标记

    ASP.NET -- WebForm: 给图片添加水印标记 ASP.NET:使用 WebForm(C#) 制作一个简单的为图片添加水印的页面. 1. Test2.aspx文件 <%@ Page ...

  7. python base64 编解码,转换成Opencv,PIL.Image图片格式

    二进制打开图片文件,base64编解码,转成Opencv格式: # coding: utf-8 import base64 import numpy as np import cv2 img_file ...

  8. JAVA给图片添加水印

    package com.test; import org.junit.Test; import javax.imageio.ImageIO; import java.awt.*; import jav ...

  9. .net为图片添加水印(转) jpg png和gif格式

    .net为图片添加水印(转) jpg png和gif格式 .net为图片添加水印(转) jpg png和gif格式,转自csdn的hyde82,现在跟大家一起来分享下: 利 用.net中System. ...

  10. iOS边练边学--(Quartz2D)图片添加水印

    一.给图片添加水印的基本步骤 加载图片 手动创建位图上下文 绘制原生的图片 给原生的图片添加文字 生成一张图片给我们,从上下文中获取图片 关闭上下文 二.注意:位图上下文的获取方式跟layer上下文不 ...

随机推荐

  1. 禁用input自动补全,模拟type=password输入字符显示为星号

    最近遇到一个想禁用浏览器的密码自动补全的功能,翻遍了整个技术论坛大多使用用auto-complete="new-password"但是本人测试不怎么管用,所有又找到了如下几种方法, ...

  2. ODOO升级可能遇到问题

    a,找不到模块或视图不存在. 解决方案:查看是否将相应py文件加入到__init__文件中,或xml文件加入到manifest->data文件中. b, 找不到关联模块. 解决方案:这种一般要么 ...

  3. Vue——属性指令、style和class、条件渲染、列表渲染、事件处理、数据双向绑定、过滤案例

    vm对象 <body> <div id="app"> <h1>{{name}}</h1> <button @click=&qu ...

  4. 驱动开发:内核封装WFP防火墙入门

    WFP框架是微软推出来替代TDIHOOK传输层驱动接口网络通信的方案,其默认被设计为分层结构,该框架分别提供了用户态与内核态相同的AIP函数,在两种模式下均可以开发防火墙产品,以下代码我实现了一个简单 ...

  5. ARC118E Avoid Permutations

    题意 给定一个长度为 \(n\) 的排列 \(p\),在一个 \((n + 2)\times(n + 2)\) 的网格上,禁止通过 \((i, p_i)\) 这些点,每次只能向上或右走一格,从 \(( ...

  6. JavaWeb之Servlet详解(以及浏览器调用 Servlet 流程分析图)

    Servlet 1.什么是Servlet Servlet(java 服务器小程序) 他是由服务器端调用和执行的(一句话:是Tomcat解析和执行) 他是用java语言编写的, 本质就是Java类 他是 ...

  7. Auto.js食用指南

    Auto.js食用指南 控件点击是autojs特有的一项功能,基于安卓的无障碍功能的,在软件上有很好的支持,常用于办公软件等...... 前言: 软件选择: auto.js 8.0pro版本(对比4. ...

  8. Unity的AssetPostprocessor之Model:深入解析与实用案例 2

    Unity AssetPostprocessor中Model相关函数的实际应用 Unity AssetPostprocessor是Unity引擎中的一个重要功能,它可以在导入资源时自动一些脚本,以便对 ...

  9. 获得 markdown 无序列表格式的文件目录树

    tree 命令可以获得文件目录结构,但是放在文档中时,我想用 markdown 无序列表的形式,在编辑器内还可以折叠. 完整解决方案:在 ~/.oh-my-zsh/custom 下添加下述自定义函数( ...

  10. Centos7中搭建Redis6集群操作步骤

    目录 下载安装包 解压安装装包 安装依赖 安装 创建目录 设置配置文件 创建启动服务 制作启动文件 启动并验证Redis 开放防火墙端口 创建集群 集群其他操作 注意 下载安装包 # 进入软件下载目录 ...