你好,欢迎进入江苏优软数字科技有限公司官网!

诚信、勤奋、创新、卓越

友好定价、专业客服支持、正版软件一站式服务提供

13262879759

工作日:9:00-22:00

图片加水印与重命名:用pillow、os模块及sublime text 3批量操作提升效率

发布时间: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 ImageDrawfrom 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 Imagefrom PIL import[id_1642256542]from PIL import ImageFontim=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 Imageim = Image.open('12.jpg')  # 打开图片im1= Image.open('11.jpg')  # 打开水印图片w,h= im.sizemm=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 sleepfrom PIL import Imagefrom PIL import ImageDrawfrom PIL import ImageFonta=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 sleepfrom PIL import Imageimport datetimefrom PIL import ImageDrawfrom PIL import ImageFonta=0def search(path):    for x in os.listdir(path):        if os.path.isfile(x) and x.endswith('.jpg'):            yield xdef 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 Imageimport globimport osimport randomaa=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 -

如有侵权请联系删除!

13262879759

微信二维码