手把手教你用Python批量給圖片添加水印!知了干貨分享终畅!

?我們?cè)诰W(wǎng)上瀏覽一些文章的時(shí)候,經(jīng)常會(huì)發(fā)現(xiàn)文章中會(huì)有一些圖片竟闪,上面會(huì)有一些標(biāo)識(shí)离福,而這些標(biāo)識(shí)就是我們經(jīng)常說(shuō)的水印了。很多時(shí)候炼蛤,我們需要給圖片加上一些修飾妖爷,好讓別人能直觀的認(rèn)識(shí)到這個(gè)圖片的出處以及來(lái)源,同時(shí)還能有效防止別人盜圖理朋。

實(shí)現(xiàn)對(duì)圖片的批量添加水印絮识,可以告別繁瑣的工作,增加工作效率嗽上。而對(duì)于添加水印和重命名次舌,我們用到的模塊有pillow,os,開(kāi)發(fā)工具 sublime text 3兽愤。

一垃它、單張圖片添加水印文字

下載并導(dǎo)入所需模塊

pip install pillow  #下載pillow模塊
from PIL import Image #導(dǎo)入,下同
from PIL import ImageDraw
from PIL import ImageFont

打開(kāi)圖片文件

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

構(gòu)建畫(huà)圖對(duì)象

draw=ImageDraw.Draw(im) 

導(dǎo)入字體文件

ImageFont.truetype(r'C:\Windows\Fonts\simsun.ttc',size=40)#導(dǎo)入字體文件

修改水印顏色

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 ImageDraw  
from PIL import ImageFont
im=Image.open('12.jpg')
draw=ImageDraw.Draw(im) 
text = '我愛(ài)你'
Font=ImageFont.truetype(r'C:\Windows\Fonts\simsun.ttc',size=40)#導(dǎo)入字體文件
draw.ink = 0 + 0 * 256 + 255 * 256 * 256 # 顏色
draw.text([200,200],text,'red',font=Font) # 文字加載到圖片上
im.save('12.png','png') #保存圖片
im.show() #顯示圖片

完成之后的效果是這樣的:

image

可以看出我愛(ài)你三個(gè)打字就被刻在了上面烹看。

二国拇、單張圖片添加水印圖片

這樣就完成了圖片的首次文字水印,當(dāng)然你也可以弄一個(gè)圖片水印惯殊,只需加一層圖層即可酱吝,比如我要將劉亦菲加在這個(gè)滿是英文的圖片上,就可以這樣做:

導(dǎo)入相關(guān)模塊

from PIL import Image

導(dǎo)入原圖片和水印圖片并得出原圖片大小

im = Image.open('12.jpg')  # 打開(kāi)圖片
im1= Image.open('11.jpg')  # 打開(kāi)水印圖片
w,h= im.size

重新設(shè)置水印圖片大小土思,保證圖片不會(huì)與原圖重疊并溢出

mm=im1.resize((80,40),Image.ANTIALIAS) #重新設(shè)置水印圖片大小

設(shè)置水印圖片位置

position = (w-100,h-100) # 默認(rèn)設(shè)定水印位置為右下角

新建圖層

layer = Image.new('RGB', im.size)  # 新建一個(gè)圖層

將水印圖片添加到圖層上

layer.paste(mm, position)  # 將水印圖片添加到圖層上

合并水印和原圖片為一張圖

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

保存圖片

im2.save('21.jpg') #保存圖片

完整代碼如下:


from PIL import Image
im = Image.open('12.jpg')  # 打開(kāi)圖片
im1= Image.open('11.jpg')  # 打開(kāi)水印圖片
w,h= im.size
mm=im1.resize((80,40),Image.ANTIALIAS) #重新設(shè)置水印圖片大小
position = (w-100,h-100) # 默認(rèn)設(shè)定水印位置為右下角
layer = Image.new('RGBA', im.size)  # 新建一個(gè)圖層
layer.paste(mm, position)  # 將水印圖片添加到圖層上
im2= Image.composite(layer, im, layer)#合并圖片
im2.save('21.jpg') #保存圖片

這樣即可完成水印圖片的填充务热。效果圖如下:

image

三、批量給圖片添加水印文字

但是我們要做的是批量給圖片添加水印效果啊己儒,所以現(xiàn)在我們需要用到某些系統(tǒng)模塊崎岂,比如os。既然是批量闪湾,那我們肯定得先獲取到某個(gè)目錄所有圖片文件了冲甘,我們可以這樣做:

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文件

獲取到了之后了我們就可以逐個(gè)讀取到圖片信息啦。

2.添加水印

接下來(lái)我們就可以寫(xiě)代碼了,首先還是先寫(xiě)添加文字水印江醇,如何批量添加了濒憋,那肯定是把這些逐個(gè)讀取到的圖片一個(gè)個(gè)打上文字水印啦,不過(guò)記得加一個(gè)睡眠時(shí)間陶夜,因?yàn)閳D片一下子全部讀取保存會(huì)很耗費(fèi)內(nèi)存的凛驮,那么下面就跟小編一起來(lái)打水印吧。還是原來(lái)的套路条辟,這里我就不細(xì)說(shuō)了黔夭,免得大家說(shuō)我像老太婆的裹腳布一樣,直奔主題羽嫡,上代碼:

from time import sleep
from PIL import mage
from PIL import ImageDraw
from PIL import ImageFont
a=0 #初始化圖片編號(hào)
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)  #構(gòu)建畫(huà)圖對(duì)象
    draw.text((im.size[0]-330,im.size[1]-85), '我愛(ài)你', fill='blue',font=font)#添加水印
    dir = r'C:\Users\Administrator\Desktop\tp' #保存位置
    filename = os.path.join(dir,str(a)+'.jpg') #保存文件名
    sleep(1)  #睡眠時(shí)間
    im.save(filename) #保存文件

for y in search(r'C:\Users\Administrator\Desktop'):
    a=a+1  #每次開(kāi)始保存文件纠修,a就加一
    ger(y) #添加水印并保存圖片 

最后結(jié)果就如下圖所示:
image

四、批量給圖片添加水印圖片

可以看出已經(jīng)對(duì)桌面上所有的JPG文件添加了水印厂僧,水印文字為‘我愛(ài)你’,批量添加水印圖片也是差不多的套路了牛,只需把添加單個(gè)水印圖片代碼稍加改動(dòng)即可颜屠,下面請(qǐng)看:

from time import sleep

完成后效果如圖:
image

可以看出,我們桌面上的每一張圖片基本上就已經(jīng)能夠打上水印了鹰祸,是不是很簡(jiǎn)單了甫窟。

五、批量文件名重命名

在這里蛙婴,小編還要給大家另外傳授一個(gè)絕招粗井,那就是批量文件改名了,也是相當(dāng)?shù)暮?jiǎn)單的說(shuō):

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(r'C:\Users\Administrator\Desktop\11.jpg')  #打開(kāi)水印圖片
    mm=im1.resize((80,40),Image.ANTIALIAS) #重新設(shè)置水印圖片大小
    position = (w-100,h-100) # 默認(rèn)設(shè)定水印位置為右下角
    layer = Image.new('RGBA', im.size)  # 新建一個(gè)圖層
    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)  #睡眠時(shí)間
    im2.save(filename) #保存文件
for y in search(r'C:\Users\Administrator\Desktop'):
    a=a+1
    ger(y)

運(yùn)行后效果如圖:
image

如果你想平時(shí)用于修改文件名和加水印這些繁瑣操作的話街图,也可以將小編寫(xiě)的這些功能封裝到一個(gè)類模型里浇衬,然后做一個(gè)界面出來(lái)以方便別人使用,在這里由于時(shí)間關(guān)系小編就不寫(xiě)了餐济。

總的來(lái)說(shuō)該項(xiàng)目并沒(méi)有多大的難點(diǎn)耘擂,唯一要注意的就是只有png圖片在RGBA模式下設(shè)置alpha值才可以進(jìn)行透明度設(shè)置,所以我并沒(méi)有用這個(gè)雞肋的功能絮姆,最后祝大家能學(xué)以致用醉冤,學(xué)有所成。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末篙悯,一起剝皮案震驚了整個(gè)濱河市蚁阳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鸽照,老刑警劉巖螺捐,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡归粉,警方通過(guò)查閱死者的電腦和手機(jī)椿疗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)糠悼,“玉大人届榄,你說(shuō)我怎么就攤上這事【笪梗” “怎么了铝条?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)席噩。 經(jīng)常有香客問(wèn)我班缰,道長(zhǎng),這世上最難降的妖魔是什么悼枢? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任埠忘,我火速辦了婚禮,結(jié)果婚禮上馒索,老公的妹妹穿的比我還像新娘莹妒。我一直安慰自己,他們只是感情好绰上,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布旨怠。 她就那樣靜靜地躺著,像睡著了一般蜈块。 火紅的嫁衣襯著肌膚如雪鉴腻。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,255評(píng)論 1 308
  • 那天百揭,我揣著相機(jī)與錄音爽哎,去河邊找鬼。 笑死器一,一個(gè)胖子當(dāng)著我的面吹牛倦青,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播盹舞,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼产镐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了踢步?” 一聲冷哼從身側(cè)響起癣亚,我...
    開(kāi)封第一講書(shū)人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎获印,沒(méi)想到半個(gè)月后述雾,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年玻孟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了唆缴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡黍翎,死狀恐怖面徽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情匣掸,我是刑警寧澤趟紊,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站碰酝,受9級(jí)特大地震影響霎匈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜送爸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一铛嘱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧袭厂,春花似錦墨吓、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)谐丢。三九已至爽航,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間乾忱,已是汗流浹背讥珍。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留窄瘟,地道東北人衷佃。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蹄葱,于是被迫代替她去往敵國(guó)和親氏义。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359