批量改名_手把手教你用Python批量给图片添加水印 | 知了干货分享

7a1bf88d63d2122db73a8b4cd53eaa58.gif

我们在网上浏览一些文章的时候,经常会发现文章中会有一些图片,上面会有一些标识,而这些标识就是我们经常说的水印了。很多时候,我们需要给图片加上一些修饰,好让别人能直观的认识到这个图片的出处以及来源,同时还能有效防止别人盗图。

实现对图片的批量添加水印,可以告别繁琐的工作,增加工作效率。而对于添加水印和重命名,我们用到的模块有pillow,os,开发工具 sublime text 3。

一、单张图片添加水印文字

下载并导入所需模块

pip install pillow  #下载pillow模块from PIL import Image #导入,下同from PIL import ImageDrawfrom PIL import ImageFont

打开图片文件

im=Image.open('12.jpg')

构建画图对象

draw=ImageDraw.Draw(im)

导入字体文件

ImageFont.truetype(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') #保存图片

完整代码如下:

from PIL import Imagefrom PIL import ImageDraw  from PIL import ImageFontim=Image.open('12.jpg')draw=ImageDraw.Draw(im) text = '我爱你'Font=ImageFont.truetype(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() #显示图片

完成之后的效果是这样的:

84ce38fb4dc1377da99dd62c7cf10039.png

可以看出我爱你三个打字就被刻在了上面。

二、单张图片添加水印图片

这样就完成了图片的首次文字水印,当然你也可以弄一个图片水印,只需加一层图层即可,比如我要将刘亦菲加在这个满是英文的图片上,就可以这样做:

导入相关模块

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('RGB', im.size) # 新建一个图层

将水印图片添加到图层上

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

合并水印和原图片为一张图

im2= Image.composite(layer, im, layer)#合并图片

保存图片

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.size)  # 新建一个图层layer.paste(mm, position)  # 将水印图片添加到图层上im2= Image.composite(layer, im, layer)#合并图片im2.save('21.jpg') #保存图片

这样即可完成水印图片的填充。效果图如下:

2ff9e333124b3f9aea62e2af5755b79d.png三、批量给图片添加水印文字但是我们要做的是批量给图片添加水印效果啊,所以现在我们需要用到某些系统模块,比如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(r'C:\Users\Administrator\Desktop'):    ger(y) #桌面上所有的JPG文件
获取到了之后了我们就可以逐个读取到图片信息啦。2.添加水印接下来我们就可以写代码了,首先还是先写添加文字水印,如何批量添加了,那肯定是把这些逐个读取到的图片一个个打上文字水印啦,不过记得加一个睡眠时间,因为图片一下子全部读取保存会很耗费内存的,那么下面就跟小编一起来打水印吧。还是原来的套路,这里我就不细说了,免得大家说我像老太婆的裹脚布一样,直奔主题,上代码:
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 = r'C:\Users\Administrator\Desktop\tp' #保存位置    filename = os.path.join(dir,str(a)+'.jpg') #保存文件名    sleep(1)  #睡眠时间    im.save(filename) #保存文件for y in search(r'C:\Users\Administrator\Desktop'):    a=a+1  #每次开始保存文件,a就加一    ger(y) #添加水印并保存图片
最后结果就如下图所示:4a354f44b66f72c1176a95918fa5dcdf.png四、批量给图片添加水印图片可以看出已经对桌面上所有的JPG文件添加了水印,水印文字为‘我爱你’,批量添加水印图片也是差不多的套路,只需把添加单个水印图片代码稍加改动即可,下面请看:
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(r'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)  # 将水印图片添加到图层上    im2= Image.composite(layer, im, layer)#合并图片    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)
完成后效果如图:f080b947b8be9b6fc93fb68ca57d4df3.png可以看出,我们桌面上的每一张图片基本上就已经能够打上水印了,是不是很简单了。五、批量文件名重命名在这里,小编还要给大家另外传授一个绝招,那就是批量文件改名了,也是相当的简单的说:
#批量重命名图片文件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')) #重命名
运行后效果如图:f7b3b7392d37a5b7e44d36116a2312cc.png如果你想平时用于修改文件名和加水印这些繁琐操作的话,也可以将小编写的这些功能封装到一个类模型里,然后做一个界面出来以方便别人使用,在这里由于时间关系小编就不写了。

总的来说该项目并没有多大的难点,唯一要注意的就是只有png图片在RGBA模式下设置alpha值才可以进行透明度设置,所以我并没有用这个鸡肋的功能,最后祝大家能学以致用,学有所成。

需要本文完整所有的代码,请关注本公众号,然后发送“2059”即可获取本文中所有代码!

- End -c27dc9d9dd28f88e93827294f5152d42.gifPython爬虫高级之JS渗透登录新浪微博 | 知了独家研究WTF?能把Python代码写得这么优雅的都是神仙程序员吧!Python协程还不理解?请收下这份超详细的异步编程教程!还没学会来找我!徐大sao吃了哪些好吃的?用Python生成词云,一目了然!性能是Flask的3倍!比PHP7还快!这个Python框架你值得拥有!(附使用教程)cb063f3f856efce71e98562f57a5980b.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/264129.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux环境下安装nginx步骤(不错)

开始前,请确认gcc g开发类库是否装好,默认已经安装。 ububtu平台编译环境可以使用以下指令 apt-get install build-essential apt-get install libtool centos平台编译环境使用如下指令 安装make: yum -y install gcc automake autoconf libt…

OpenGL.Tutorial15_Lightmaps

ZC:撤销 & 重做 — Blender Manual.html(https://docs.blender.org/manual/zh-hans/dev/interface/undo_redo.html) ZC:Blender下载地址:Index of _release_Blender2.50alpha_.html(https://download.b…

后处理没有pui文件怎么打开_UG NX10.0四轴后处理下载(带PUI文件)

 提示:点击上方"NX网"↑ 免费订阅 关注老叶NC程序演示:%G40 G17 G94 G80 G90M05M09G91 G28 Z0.0M01T00 M06(Tool NaneD4R0.5 XY 0.10mm Z0.00mm)(D4.00 R0.50 FL50.00 L75.00)G00 G90 G55 X68.263 Y.969 A187.77 S4500 M03G43 Z79…

catia v5法矢数据软件_catia介绍

CATIA是英文 Computer Aided Tri-Dimensional Interface Application 的缩写。 是世界上一种主流的CAD/CAE/CAM 一体化软件。在70年代Dassault Aviation 成为了第一个用户,CATIA 也应运而生。从1982年到1988年,CATIA 相继发布了1版本、2版本、3版本&…

(十七)WebGIS中距离及面积测量的原理和实现以及坐标转换的简单介绍

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/。 1.背景 在这一章里我们将讨论基础工具栏中另外两个常用工具:距离测量工具盒面积测量工具。 距离测量工具要求实现如下功能: a.通…

access查询出生日期格式转换_从身份证中提取出生日期的3个方法和计算年龄和星座的方法...

在我们日常的工作当中,经常会遇到通过身份证来获取出生年月日的需求,今天就给大家介绍三种可以从身份证中提取出生年月日的方法。我们都知道身份证不同的区域是有不同的含义的,代表出生年月日的数字是第7位到第14位,也就说我们把这…

AutoRun Pro Enterprise II 教程--- 教你制作软件工具箱教程清晰版(教程画面清晰,教程语音可以调高)...

AutoRun Pro Enterprise II是一款功能极为强大的自动运行菜单制作工具。可在一个所见即所得的环境中创建并编辑一个专业的CD、DVD自动运行界面并生成自动运行文件。在自动运行界面中支持打开或执行文件,打印文档,发送邮件,访问站点&#xff0…

access如何设置定期报表汇总_报表工具选型对比系列 - 大报表

有些报表查询出的数据行数可达千万甚至上亿,这类报表通常被叫做大报表,大多数情况下都是些清单明细数据报表,也有少量分组报表。针对大报表,如果像常规报表一样,将数据一次性全取再交给前端呈现是不可行的。一是等待时…

PLSQL Developer远程连接oracle数据库

前提是本机已经安装oracle,利用 net configuration assistant 。若本机没有安装oracle,无需装oracle的方法请点我打开net configuration assistant,选择“本地网络服务名配置,如下图所示然后选择添加服务名选择远程数据库实例名主…

spad 探测器_大面阵SPAD阵列集成微透镜阵列,填充因子改善明显

基于CMOS制造工艺可实现大面阵、单片式单光子雪崩光电二极管(SPAD)阵列,并受到如3D成像、荧光寿命成像等各种应用的青睐,但常常受到低填充因子(fill factor,指感光区域面积与像元面积的比值)的困扰。SPAD填充因子的数值通常小于5%&#xff0c…

Azure Backup 简介

ViswanathTata云Enterprise 项目经理AzureBackup是 Azure恢复服务的一部分,在安全高效的环境中对上传到 Azure的数据提供简单可靠的管理和保护。Azure Backup以经济高效的方式提供无限的存储空间和长期的数据保留,这些功能使其成…

笔记:Java虚拟机运行时数据区

Java虚拟机在执行Java程序的过程中会把它管的内存划分为以下若干个不同的区域: 1、程序计数器 程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器;由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时…

高电压技术思维导图_钢铁技术:钢铁行业板坯连铸结晶器振动常见故障思维导图...

钢铁虾:(您距离钢铁虾只差关注)结晶器是连铸机的心脏,其振动偏差直接危及连铸过程的生产安全,其振动精度也往往与铸坯表面裂纹等缺陷息息相关。国内外常见板坯连铸结晶器振动形式有:①机械式振动;②双液压缸式振动&…

可以编辑vga格式文件的软件-PowerCreator Media Studio

vga格式的课件越来越多。不小心没有录制好的可见,想修改一下找了很久居然没有找到一个合适的软件。还有朋友给了一款:PowerCreator Media Studio用起来很方面,和premiere的操作很像。大赞。 安装后自带可以播放vga格式的播放器。 转载于:htt…

获取当前文件所在路径

代码 1 unitUnit1;2 interface3 uses4 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,5 Dialogs, StdCtrls;6 type7 TForm1 class(TForm)8 Button1: TButton;9 Button2: TButton;10 procedureButton1Click(Sender: TObject);11 procedureButton2…

删除隐藏版本信息 版本回退_git之版本穿梭术

上一篇主要针对使用git add和git commit两个指令提交文件到本地版本库做了详细的介绍,其实提交文件到版本库无非就是两个步骤,先将文件添加到暂存区,所有要提交的文件全部添加完毕,统一提交到版本库。那我们每一次提交都会生成一个…

c#中使用ref和out传值

c#中使用ref和out传值 首先,如果不使用这两个关键字,那是什么样 呢?看下面的例子:使用ref:using System; class Test {     static void Swap(ref int x, ref int y)     {         int temp x;         x y;         y temp;     }  …

喜马拉雅第三方客户端开发(接口和接口数据解析)。

前言:最近闲来无事,看了网上豆瓣的第三方客户端,手有点痒,决定自己动手开发一个客户端,比较了荔枝和喜马拉雅,决定开发喜马拉雅的第三方客户端。 客户端使用了WPF开发。 1.抓取接口; 首先得解决…

聚合复合_聚合复合微生物菌剂的功能

不点蓝字关注我飞走啦!在经营肥料上来讲,大家都知道做复合微生物菌剂,不仅可以活化疏松土壤,而且在各种作物上抗逆、防病、增产的效果都非常的好。问为什么说大家都要重点使用聚合微生物菌剂呢?答因为聚合微生物菌剂和…

代理模式详解(静态代理和动态代理的区别以及联系)

原文链接:https://www.cnblogs.com/takumicx/p/9285230.html 1. 前言 代理模式可以说是生活中处处可见。比如说在携程上定火车票,携程在这里就起到了一个代理的作用,比起我们在官网上或者直接去柜台订票,携程可以为用户提供更多人性化的选择。再比如代购,我自己的mb…