使用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. 原来.NET写的Linux桌面这么好看?

    如何使用Blazor在Linux平台下运行Desktop程序 本文将讲解如何使用Blazor运行跨平台应用,应用到的技术有以下几点 Blazor Masa Blazor Photino.Blazor ...

  2. Nacos必知必会:这些知识点你一定要掌握!

    前言 Nacos 是一个开源的服务发现.配置管理和服务治理平台,是阿里巴巴开源的一款产品. Nacos 可以帮助开发者更好地管理微服务架构中的服务注册.配置和发现等问题,提高系统的可靠性和可维护性. ...

  3. 一篇文章告诉你什么是Java内存模型

    在上篇 并发编程Bug起源:可见性.有序性和原子性问题,介绍了操作系统为了提示运行速度,做了各种优化,同时也带来数据的并发问题, 定义 在单线程系统中,代码按照顺序从上往下顺序执行,执行不会出现问题. ...

  4. 一步步教你如何搭建K8S集群

    一.环境配置 三台CentOS7虚拟机,默认配置,内存2GB.处理器2核心. 先更新下系统 1 sudo yum update 2 sudo yum upgrade 二.安装并启动 docker 1 ...

  5. 大家听过Java applet吗?为什么不再流行了

    前言 Java applet 不知道有同学听过吗?我也只是听过,并没有使用过.我特意去了解了一下它,本文就对 Java applet 进行简单介绍,说说它的辉煌与衰败.仅此而已,现在已经没人使用 Ja ...

  6. WPF实现新手引导

    1. 半透明灰的遮罩层 新建一个遮盖的window窗体 canvas是后期可以在思显示高亮区域 //定义一个window将它的样式设置透明等可以覆盖到其他窗体上,其中遮罩层使用border控件 //原 ...

  7. Android-NDK开发——基本概念

    在Android开发中,有时候出于安全,性能,代码共用的考虑,需要使用C/C++编写的库.虽然在现代化工具链的支持下,这个工作的难度已经大大降低,但是毕竟万事开头难,初学者往往还是会遇到很多不可预测的 ...

  8. php发起支付加密数据供获取订单状态使用

    <?php//作者主页: https://www.bz80.comnamespace Index\Controller; class PayController extends BaseCont ...

  9. 彻底解决各种浏览器访问不了GitHub问题(注意代理)

    如果有穿墙插件如Google助手  VPN  SS 之类别 有可能被全局代理 首先关闭这些软件 或者浏览器插件 假设,您的本地代理端口为:1080 ,打开git base窗口进行按下列的方式设置.(在 ...

  10. ENVI实现QUAC、简化黑暗像元、FLAASH方法的遥感影像大气校正

    本文介绍基于ENVI软件,实现对Landsat 7遥感影像加以预处理与多种不同大气校正方法的操作. 目录 1 数据导入与辐射定标 2 波段合成 3 编辑头文件 4 转换文件格式 5 QUAC快速大气校 ...