发布时间:2025-04-05
浏览次数:0
<[]g src='https://mmbiz.qpic.cn///640?=gif' alt='图片'/>
我们在网上浏览一些文章时,常能发现文章中有图片,这些图片上有标识,这些标识就是我们常说的水印。很多时候,我们需要给图片添加修饰,以便他人能直观地知晓图片的出处和来源,并且还能有效阻止他人盗图。
实现对图片进行批量添加水印,这样就能够告别繁琐的工作,提升工作效率。在添加水印和重命名方面,我们所用到的模块有 os 以及开发工具 text 3。
一、单张图片添加水印文字
下载并导入所需模块
pip install pillow #下载pillow模块
from PIL import[id_527068053]#导入,下同
from PIL import ImageDraw
from PIL import ImageFont
打开图片文件
im=Image.open('12.jpg')
构建画图对象
draw=ImageDraw.Draw(im)
导入字体文件
ImageFont.truetype(C:\Windows\Fonts 路径下的 simsun.ttc 文件,size=40)#导入字体文件
修改水印颜色
draw.ink 等于 0 加上 0 乘以 256 再加上 255 乘以 256 乘以 256# 颜色
添加水印
draw.text([200,200],text,'red',font=Font) # 文字加载到图片上
保存文件
im.save('12.png','png') #保存图片
完整代码如下:
from PIL import Image
from PIL import[id_1642256542]
from PIL import ImageFont
im=Image.open('12.jpg')
draw=ImageDraw.Draw(im)
text = '我爱你'
[id_203200666]r'C:\Windows\Fonts\simsun.ttc',size=40)#导入字体文件
draw.ink = 0 + 0 * 256 + 255 * 256 * 256 # 颜色
draw.text([200,200],text,'red',font=Font) # 文字加载到图片上
im.save('12.png','png') #保存图片
im.show() #显示图片
完成之后的效果是这样的:
可以看出我爱你三个打字就被刻在了上面。
二、单张图片添加水印图片
完成了图片的首次文字水印。你也能够制作一个图片水印,只需添加一层图层就行。例如,要把刘亦菲加在这个满是英文的图片上,就可以按如下方式操作:
导入相关模块
from PIL import Image
导入原图片和水印图片并得出原图片大小
im = Image.open('12.jpg') # 打开图片
im1= Image.open('11.jpg') # 打开水印图片
w,h= im.size
重新设置水印图片大小,保证图片不会与原图重叠并溢出
mm 是将 im1 进行尺寸调整,调整后的尺寸为(80,40),并且使用了 Image.ANTIALIAS 进行抗锯齿处理。#重新设置水印图片大小
设置水印图片位置
position = (w-100,h-100) # 默认设定水印位置为右下角
新建图层
layer = Image.new('RGB', im.size) # 新建一个图层
将水印图片添加到图层上
layer.paste(mm, position) # 将水印图片添加到图层上
合并水印和原图片为一张图
Image.composite(layer, im, layer) 得到了 im2 。#合并图片
保存图片
im2.save('21.jpg') #保存图片
完整代码如下:
from PIL import Image
im = Image.open('12.jpg') # 打开图片
im1= Image.open('11.jpg') # 打开水印图片
w,h= im.size
mm=im1.resize((80,40),Image.ANTIALIAS) #重新设置水印图片大小
position = (w-100,h-100) # 默认设定水印位置为右下角
创建一个名为 layer 的对象,该对象是通过调用 Image.new 函数生成的,其参数为 'RGBA' 和 im 的尺寸,即创建了一个指定颜色模式和尺寸的新图像。# 新建一个图层
layer.paste(mm, position) # 将水印图片添加到图层上
im2= Image.composite(layer, im, layer)#合并图片
im2.save('21.jpg') #保存图片
这样即可完成水印图片的填充。效果图如下:
三、批量给图片添加水印文字
我们要做的是批量给图片添加水印效果。因此,现在需要用到某些系统模块,例如 os。
既然是批量的情况,那我们首先得获取到某个特定目录下的所有图片文件。我们可以通过以下方式来进行:
1.遍历指定目录所有图片文件
def search(path):
for x in os.listdir(path): #遍历目录下的所有文件和文件夹
if os.path.isfile(x) and x.endswith('.jpg'): #判断文件x是否文件且它的后缀是否是.jpg
yield x #生成器
for y in search(C:\Users\Administrator\Desktop 这个路径位于用户的桌面上,具体来说是在管理员用户的桌面上。它是一个特定的文件或文件夹所在的位置,可能包含各种数据或程序。):
ger(y) #桌面上所有的JPG文件
获取到了之后了我们就可以逐个读取到图片信息啦。
2.添加水印
接下来就可以开始写代码啦。首先要写添加文字水印的部分。如何实现批量添加呢?那就是把逐个读取到的图片,一个个都打上文字水印。不过要记得加上一个睡眠时间,因为如果一下子把所有图片都读取并保存sublime text 3 图片,会很耗费内存。下面就让我们跟着小编一起来打水印吧。
依旧是原先的那一套方式,在此我就不再详细阐述了,以免大家觉得我如同老太婆的裹脚布那般冗长啰唆,直接进入主题,呈上代码:
from time import sleep
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
a=0 #初始化图片编号
def search(path):
for x in os.listdir(path): #遍历目录下的所有文件和文件夹
if os.path.isfile(x) and x.endswith('.jpg'): #判断文件x是否文件且它的后缀是否是.jpg
yield x #生成器
def ger(x):
font = ImageFont.truetype(r'C:\Windows\Fonts\simsun.ttc',size=40) #添加字体文件和字体大小
im=Image.open(x)
draw = ImageDraw.Draw(im) #构建画图对象
draw.text((im.size[0]-330,im.size[1]-85), '我爱你', fill='blue',font=font)#添加水印
dir = C:\Users\Administrator\Desktop 路径下的 tp #保存位置
filename 是由 dir 和 str(a) 拼接而成的。'.jpg') #保存文件名
sleep(1) #睡眠时间
im.save(filename) #保存文件
for y in search(r'C:\Users\Administrator\Desktop'):
a=a+1 #每次开始保存文件,a就加一
ger(y) #添加水印并保存图片
最后结果就如下图所示:
四、批量给图片添加水印图片
可以看出桌面上所有的 JPG 文件都已添加了水印sublime text 3 图片,水印文字是“我爱你”。批量添加水印图片的套路大致相同,只需对添加单个水印图片的代码稍作改动就行。下面请看:
from time import sleep
from PIL import Image
import datetime
from PIL import ImageDraw
from PIL import ImageFont
a=0
def search(path):
for x in os.listdir(path):
if os.path.isfile(x) and x.endswith('.jpg'):
yield x
def ger(x):
im=Image.open(x)
w,h= im.size
im1= Image.open(C:\Users\Administrator\Desktop 路径下有一个名为 11.jpg 的文件。) #打开水印图片
mm=im1.resize((80,40),Image.ANTIALIAS) #重新设置水印图片大小
position = (w-100,h-100) # 默认设定水印位置为右下角
layer = Image.new('RGBA', im.size) # 新建一个图层
layer.paste(mm, position) # 将水印图片添加到图层上
Image.composite(layer, im, layer) 的结果赋值给了 im2 。#合并图片
dir = r'C:\Users\Administrator\Desktop\tp'
filename = os.path.join(dir,str(a)+'.png') #要保存的文件名
sleep(1) #睡眠时间
im2.save(filename) #保存文件
for y in search(r'C:\Users\Administrator\Desktop'):
a=a+1
ger(y)
完成后效果如图:
可以看出,我们桌面上的每一张图片大致上就已经具备可以打上水印的条件了,这是不是很简单呢?
五、批量文件名重命名
在这里,小编要给大家传授一个绝招,那就是批量文件改名,这是相当简单的。
#批量重命名图片文件
from PIL import Image
import glob
import os
import random
aa=input('路径:') #输入要改名的文件的目录
os.chdir(r'%s'%aa) #更改访问路径
os.getcwd() #切换到当前目录
ab=glob.glob('*.jpg') #搜索所有的jpg文件
qq=input('caoxun:') #输入存储新文件的目录
for x in range(len(ab)):
os.rename 函数用于将文件或目录从一个位置移动到另一个位置。这里将 ab 列表中的第 x 个元素进行重命名,重命名后的位置是 os.path.join(qq, str(x)) 所指定的路径。'.bmp')) #重命名
运行后效果如图:
如果你平时要进行修改文件名以及加水印等繁琐操作,那么可以把小编所写的这些功能封装到一个类模型中,接着制作一个界面,以便他人使用。在这里,因为时间的缘故,小编就没有进行编写。
总的来说,该项目难度不大。需要注意的是,只有 png 图片在 RGBA 模式下设置 alpha 值,才能够进行透明度设置。因此,我没有使用这个鸡肋的功能。最后,祝大家学以致用,学有所成。
若要获取本文完整的所有代码,需关注本公众号,接着发送“2059”便可。
- End -
如有侵权请联系删除!
Copyright © 2023 江苏优软数字科技有限公司 All Rights Reserved.正版sublime text、Codejock、IntelliJ IDEA、sketch、Mestrenova、DNAstar服务提供商
13262879759
微信二维码