python图片水印软件_使用Python编写批量添加图片水印程序:一、代码方案

一、为什么要为图片添加水印

在互联网写文章最头疼的一件事情就是发表的文章容易被抄袭,各种抄袭的手段真的是层出不穷。无奈,只能在不影响阅读体验的情况下不断地提高反抄袭的难度。虽然防不住,但是为文章中的图片添加水印,至少能够保证文章被抄袭之后,读者还能知道文章的来源网站。

在部分情况下,我们可以利用一些软件比如FastStone,快速截取一个带有水印的图片,如下图所示:

169717644_1_20190830051629488.jpeg

这样的工具可以快速地为图片添加上水印图像。

但是如果我们有一批的图片,其并不是通过截图生成,这种情况下如果要对每一个图片添加水印,FastStone工具就有点无能为力了。

我们可以使用市面上的一些软件来实现:

169717644_2_20190830051629535.jpeg

但是这些软件,要么不免费,要么免费但是不安全,要么太繁琐。

索性,我们就用Python来完成一个图片水印批量添加程序的开发。

二、利用Python为图片添加水印

图片添加图片水印的原理其实很简单,在一个空白的画布上依次将原图像和水印添加添加进去即可。

在Python中,我们可以借助PIL模块轻松地实现图片水印的添加。

下面,我们通过代码来演示一下。

遍历文件夹下所有图片文件

首先我们需要获取一个目录下的所有文件,提取出其中的图像文件,这一步通过内置的os模块即可实现,代码如下所示:

import os

img_suffix_list = ['png', 'jpg', 'bmp']

for i in os.listdir(r'C:Usersyang9Desktop'):

if i.split('.')[-1] in img_suffix_list:

print(i)

运行上述代码,我们将获取选定目录下后缀名为png、jpg、bmp的图形文件,其效果如下图所示:

169717644_3_20190830051629582.gif

为图片添加图片水印

下面这一步,我们为图片添加图片水印。这一步需要借助的PIL的Image类来实现。

首先,读取原始图片和水印图片,并获取原始图片的大小,代码如下所示:

img = Image.open(img_file) # 打开图片

watermark = Image.open(wm_file) # 打开水印

img_size = img.size

然后我们新建一个图层,其大小为原始图片的大小,并将水印图片添加到图层上:

wm_position = (img_size[0]-wm_size[0],img_size[1]-wm_size[1]) # 默认设定水印位置为右下角

layer = Image.new('RGBA', img.size) # 新建一个图层

layer.paste(watermark, wm_position) # 将水印图片添加到图层上

接着,我们对图层和原始图片进行合成:

mark_img = Image.composite(layer, img, layer)

最后,调用save方法,将新图片保存到本地:

mark_img.save(save_path + new_file_name)

这样,一个添加了水印的图片就生成了。

我们将其整合为两个函数,方便调用,代码如下所示:

# coding:utf-8

# @文件: code_run.py

# @创建者:州的先生

# 博客地址:zmister.com

import os,traceback

from PIL import Image

# 获取文件夹图片

def get_folder(fpath,wm_file,save_path):

try:

img_suffix_list = ['png', 'jpg', 'bmp']

for i in os.listdir(fpath):

if i.split('.')[-1] in img_suffix_list:

img_path = fpath + '/' + i

img_water_mark(img_file=img_path,wm_file=wm_file,save_path=save_path)

except Exception as e:

print(traceback.print_exc())

# 图片添加水印

def img_water_mark(img_file, wm_file,save_path):

try:

img = Image.open(img_file) # 打开图片

watermark = Image.open(wm_file) # 打开水印

img_size = img.size

wm_size = watermark.size

# 如果图片大小小于水印大小

if img_size[0] < wm_size[0]:

watermark.resize(tuple(map(lambda x: int(x * 0.5), watermark.size)))

print('图片大小:', img_size)

wm_position = (img_size[0]-wm_size[0],img_size[1]-wm_size[1]) # 默认设定水印位置为右下角

layer = Image.new('RGBA', img.size) # 新建一个图层

layer.paste(watermark, wm_position) # 将水印图片添加到图层上

mark_img = Image.composite(layer, img, layer)

new_file_name = '/new_'+img_file.split('/')[-1]

mark_img.save(save_path + new_file_name)

except Exception as e:

print(traceback.print_exc())

这样,我们通过一个函数get_folder(),指定图片的目录,水印图片的位置以及新图片保存的位置就可以了。运行代码,其效果如下动图所示:

169717644_4_20190830051629707.gif

去保存的目录看看具体的效果,都准确地添加了图片水印:

169717644_5_20190830051629785.jpeg

三、利用QT for Python制作图片水印添加程序

代码写好了之后,我们就可以很方便地借助其进行批量添加图片水印的操作了。虽然很方便,但是如果能够有一个图形用户界面的客户端程序供我们使用,那就更加好了。

在下一篇文章中,我们将介绍借助Python的PyQt5/PySide2,将批量添加图片水印的功能封装成一个桌面客户端程序。其效果如下动图所示:

169717644_6_20190830051629832.gif

著作权归作者所有

### 回答1: 你可以使用Pillow库来批量添加水印,具体步骤如下: 1. 安装Pillow库:在命令行中执行 `pip install Pillow` 进行安装。 2. 编写代码:可以参考下面的示例代码,进行修改和适应自己的需求。 ```python from PIL import Image, ImageDraw, ImageFont import os # 要添加水印的文件夹路径 folder_path = 'path/to/folder' # 水印文字和字体大小 watermark_text = 'watermark' font_size = 30 # 水印颜色和透明度 watermark_color = (255, 255, 255, 128) # 遍历文件夹中的所有图片文件 for filename in os.listdir(folder_path): if filename.endswith('.jpg') or filename.endswith('.png'): # 打开图片添加水印 image_path = os.path.join(folder_path, filename) image = Image.open(image_path).convert('RGBA') watermark = Image.new('RGBA', image.size, (0, 0, 0, 0)) draw = ImageDraw.Draw(watermark) font = ImageFont.truetype('arial.ttf', font_size) text_width, text_height = draw.textsize(watermark_text, font) x = image.width - text_width - 10 y = image.height - text_height - 10 draw.text((x, y), watermark_text, font=font, fill=watermark_color) image_with_watermark = Image.alpha_composite(image, watermark) # 保存图片 image_with_watermark.save(image_path) ``` 3. 运行代码:在命令行中执行 `python watermark.py` 运行代码,并等待程序执行完成。 注意:在运行代码前,需要将代码中的 `folder_path` 修改为要添加水印的文件夹路径,将 `watermark_text` 修改为要添加水印文字,将 `font_size` 修改为水印的字体大小,将 `watermark_color` 修改为水印的颜色和透明度。另外,代码使用的是默认的字体 `arial.ttf`,如果你想要使用其他字体,需要将字体文件放到代码所在的目录下,并将字体文件名修改为相应的名称。 ### 回答2: 在Python批量添加水印可以通过使用PIL(Python Imaging Library)库来实现。以下是一个简单的示例代码: ```python from PIL import Image from PIL import ImageDraw from PIL import ImageFont import os def add_watermark(input_dir, output_dir, watermark_text): # 遍历输入目录中的所有图片文件 for file_name in os.listdir(input_dir): if file_name.endswith('.jpg') or file_name.endswith('.png'): # 打开图片文件 input_path = os.path.join(input_dir, file_name) image = Image.open(input_path).convert('RGBA') # 创建水印文本 watermark = Image.new('RGBA', image.size, (255, 255, 255, 0)) draw = ImageDraw.Draw(watermark) font = ImageFont.truetype('arial.ttf', 36) text_width, text_height = draw.textsize(watermark_text, font=font) text_x = image.width - text_width - 10 text_y = image.height - text_height - 10 draw.text((text_x, text_y), watermark_text, fill=(128, 128, 128, 128), font=font) # 将水印到原始图片中 watermarked = Image.alpha_composite(image, watermark) # 保存水印图片 output_path = os.path.join(output_dir, file_name) watermarked.save(output_path) ``` 使用以上代码,你可以将水印文本添加到指定目录中的所有图片上,生成带有水印图片并保存到输出目录中。你只需要指定输入目录、输出目录以及要添加水印文本即可。注意,你需要提前安装PIL库,并将所需的字体文件(例如arial.ttf)放在与你的Python脚本相同的目录下。 ### 回答3: 使用Python批量添加水印可以借助第三方库进行操作。下面我以使用Pillow库为例来解释: 1. 首先,确保你已经安装了Pillow库。可以使用以下命令安装:pip install pillow。 2. 导入Pillow库和其他需要的库:from PIL import Image, ImageDraw, ImageFont, ImageEnhance 3. 批量添加水印的主要步骤如下: - 遍历需要水印图片,可以使用os库的相关函数来获取图片文件列表。 - 水印图片和背景图片:watermark_img = Image.open('水印图片路径'),background_img = Image.open('背景图片路径')。 - 调整水印的大小:可以使用watermark_img.thumbnail()函数来调整水印图片的大小。 - 在背景图片添加水印使用ImageDraw库的text()函数,在background_img对象上进行绘制。 - 保存水印图片使用background_img对象的save()函数将图片保存到指定目录下。 4. 示例代码如下: ```python from PIL import Image, ImageDraw, ImageFont import os # 水印图片和背景图片 watermark_img = Image.open('水印图片路径') # 调整水印的大小 watermark_img.thumbnail((100, 100)) # 自定义水印大小 watermark_width, watermark_height = watermark_img.size # 获取所有需水印图片文件列表 image_dir = '图片文件夹路径' image_files = [file for file in os.listdir(image_dir) if file.endswith(('.jpg', '.png'))] # 设置水印文字的样式 watermark_text = "水印文字" watermark_font = ImageFont.truetype('字体文件路径', 30) # 自定义字体和大小 # 遍历图片列表,添加水印 for image_file in image_files: image_path = os.path.join(image_dir, image_file) background_img = Image.open(image_path) # 在背景图片添加水印 draw = ImageDraw.Draw(background_img) draw.text((background_img.size[0] - watermark_width, background_img.size[1] - watermark_height), watermark_text, fill=(255, 255, 255), font=watermark_font) # 保存水印图片 output_dir = '保存水印图片的文件夹路径' output_path = os.path.join(output_dir, image_file) background_img.save(output_path) background_img.close() ``` 通过以上步骤和示例代码,你可以使用Python批量添加水印到多张图片中。请确保提供正确的水印图片路径、背景图片路径、字体文件路径和保存水印图片的文件夹路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值