Python實現(xiàn)給圖片添加文字或圖片水印
前言
圖片加水印有什么好處?在現(xiàn)今的數(shù)字化時代,網(wǎng)絡(luò)上的圖片泛濫,盜圖現(xiàn)象也越來越嚴重。因此,在發(fā)布文章時,為了保護自己的原創(chuàng)作品版權(quán),很多人選擇使用水印來保護他們的圖片。這樣就能更好地做到:
1.版權(quán)保護:在商業(yè)用途的照片中添加水印可以幫助保護作者的版權(quán),防止他人未經(jīng)授權(quán)使用照片。
2.品牌推廣:將商業(yè)品牌、商標或公司標志添加到照片中,可以幫助提高品牌知名度和曝光率。
3.防止盜版:添加水印可以防止盜版和未經(jīng)授權(quán)的使用,因為水印會明顯表明該照片的版權(quán)歸原作者所有。
4.標識來源:在社交媒體平臺上分享照片時,添加水印可以幫助其他用戶識別出照片的來源和作者。
5.保護隱私:在一些情況下,添加水印可以幫助保護照片中的個人隱私,特別是在共享照片時,可能會有人試圖使用照片來濫用或傷害個人隱私。
當(dāng)然防止濫用是最主要的,我是這么覺得。
PIL的Image模塊的基本介紹
Pillow 是 Python 中較為基礎(chǔ)的圖像處理庫,主要用于圖像的基本處理,比如裁剪圖像、調(diào)整圖像大小和圖像顏色處理等。與 Pillow 相比,OpenCV 和 Scikit-image 的功能更為豐富,所以使用起來也更為復(fù)雜,主要應(yīng)用于機器視覺、圖像分析等領(lǐng)域,比如眾所周知的“人臉識別”應(yīng)用 。
Image模塊:
Image模塊是PIL最基本的模塊,其中導(dǎo)出了Image類,一個Image類實例對象就對應(yīng)了一副圖像。同時,Image模塊還提供了很多有用的函數(shù)。
這里只是初步學(xué)習(xí)了一些用法與實際操作。
基礎(chǔ)函數(shù) | 簡介 |
---|---|
open() | 打開圖片 |
save(“test.gif”,“GIF”) | 保存(新圖片路徑和名稱,保存格式) |
show() | 顯示圖片 |
size | 是img圖片對象的成員數(shù)據(jù),是一個元組,包含了像素寬度和像素高度 |
Image.new() | 生成新的圖片 |
getpixel((1,1)) | 獲取像素點(1,1)三通道信息 |
putpixel() | 設(shè)置像素點三通道信息 |
Python代碼實現(xiàn)文字水印
下面咱們用Python代碼講解下怎么批量給圖片添加水印,并用代碼實現(xiàn)。
這里使用.png圖片格式
''' 如何批量為圖片添加文字水印 ''' from PIL import Image, ImageDraw, ImageFont,ImageEnhance path=input('請輸入要添加水印的圖片所在路徑:') text=input('請輸入水印文字:') positionflag=int(input('請輸入水印位置(0:左上角,1:左下角,2:右上角,3:右下角,4:居中):')) alphavalue=float(input('請輸入水印透明度(范圍在0——1之間的1位小數(shù)):')) #設(shè)置所使用的字體 font = ImageFont.truetype(r'simkai.ttf', 24) # 文字水印 def textMark(img): try: im = Image.open(img).convert('RGBA') # 打開原始圖片,并轉(zhuǎn)換為RGB newImg = Image.new('RGBA', im.size, (255, 255, 255, 0)) # 存儲添加水印后的圖片 imagedraw = ImageDraw.Draw(newImg) # 創(chuàng)建繪制對象 imgwidth, imgheight = im.size # 記錄圖片大小 txtwidth=font.getsize(text)[0] # 獲取字體寬度 txtheight = font.getsize(text)[1] # 獲取字體高度 # 設(shè)置水印文字位置 if positionflag == 0: # 左上角 position=(0,0) elif positionflag == 1: # 左下角 position=(0,imgheight - txtheight) elif positionflag == 2: # 右上角 position=(imgwidth - txtwidth,0) elif positionflag == 3: # 右下角 position=(imgwidth - txtwidth, imgheight - txtheight) elif positionflag == 4: # 居中 position=(imgwidth/2,imgheight/2) # 繪制文字 imagedraw.text(position, text, font=font, fill="red") # 設(shè)置透明度 alpha = newImg.split()[3] alpha = ImageEnhance.Brightness(alpha).enhance(alphavalue) newImg.putalpha(alpha) Image.alpha_composite(im, newImg).save(img,'png') # 保存圖片 except Exception as e: print(e) import os try: list = os.listdir(path) # 遍歷選擇的文件夾 for i in range(0, len(list)): # 遍歷文件列表 filepath = os.path.join(path, list[i]) # 記錄遍歷到的文件名 if os.path.isfile(filepath): # 判斷是否為文件 filetype = os.path.splitext(filepath)[1] # 獲取擴展名 if filetype == '.png': # 判斷是否為.png textMark(filepath) # 批量添加文字水印 print('批量添加水印完成') except: print('請輸入一個有效路徑……')
左上角添加水印,圖例展示:
Python代碼實現(xiàn)圖片水印
from PIL import Image path=input('請輸入要添加水印的圖片所在路徑:') imgpath=input('請輸入要作為水印圖片的路徑:') positionflag=int(input('請輸入水印位置(0:左上角,1:左下角,2:右上角,3:右下角,4:居中):')) alphavalue=int(input('請輸入水印透明度(范圍在1——10之間):')) # 圖片水印 def imgMark(img): im = Image.open(img) # 打開原始圖片 mark = Image.open(imgpath) # 打開水印圖片 rgbaim = im.convert('RGBA') # 將原始圖片轉(zhuǎn)換為RGBA rgbamark = mark.convert('RGBA') # 將水印圖片轉(zhuǎn)換為RGBA imgwidth, imgheight = rgbaim.size # 獲取原始圖片尺寸 nimgwidth, nimgheight = rgbamark.size # 獲取水印圖片尺寸 # 縮放水印圖片 scale = 10 markscale = max(imgwidth / (scale * nimgwidth), imgheight / (scale * nimgheight)) newsize = (int(nimgwidth * markscale), int(nimgheight * markscale)) # 計算新的尺寸大小 rgbamark = rgbamark.resize(newsize, resample=Image.ANTIALIAS) # 重新設(shè)置水印圖片大小 nimgwidth, nimgheight = rgbamark.size # 獲取水印圖片縮放后的尺寸 # 設(shè)置水印文字位置 if positionflag == 0: # 左上角 position = (0, 0) elif positionflag == 1: # 左下角 position = (0, imgheight - nimgheight) elif positionflag == 2: # 右上角 position = (imgwidth - nimgwidth, 0) elif positionflag == 3: # 右下角 position = (imgwidth - nimgwidth, imgheight - nimgheight) elif positionflag == 4: # 居中 position = (int(imgwidth / 2), int(imgheight / 2)) # 設(shè)置透明度:img.point(function)接受一個參數(shù),且對圖片中的每一個點執(zhí)行這個函數(shù),這個函數(shù)是一個匿名函數(shù),使用lambda表達式來完成 # convert()函數(shù),用于不同模式圖像之間的轉(zhuǎn)換,模式“L”為灰色圖像,它的每個像素用8個bit表示,0表示黑,255表示白,其他數(shù)字表示不同的灰度。 # 在PIL中,從模式“RGB”轉(zhuǎn)換為“L”模式是按照下面的公式轉(zhuǎn)換的:L = R * 299/1000 + G * 587/1000+ B * 114/1000 rgbamarkpha = rgbamark.convert("L").point(lambda x: x/alphavalue) rgbamark.putalpha(rgbamarkpha) # 水印位置 rgbaim.paste(rgbamark, position, rgbamarkpha) rgbaim.save(img) # 保存水印圖片 import os try: list = os.listdir(path) # 遍歷選擇的文件夾 for i in range(0, len(list)): # 遍歷文件列表 filepath = os.path.join(path, list[i]) # 記錄遍歷到的文件名 if os.path.isfile(filepath): # 判斷是否為文件 filetype = os.path.splitext(filepath)[1] # 獲取擴展名 if filetype == '.png': # 判斷是否為.png imgMark(filepath) # 批量添加圖片水印 print('批量添加水印完成') except Exception as e: print(e)
左下角添加圖片水印,圖例展示:
以上就是Python實現(xiàn)給圖片添加文字或圖片水印的詳細內(nèi)容,更多關(guān)于Python圖片添加水印的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python將腳本程序轉(zhuǎn)變?yōu)榭蓤?zhí)行程序的實現(xiàn)
本文主要介紹了Python將腳本程序轉(zhuǎn)變?yōu)榭蓤?zhí)行程序的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02一次性徹底講透Python中pd.concat與pd.merge
本文主要介紹了一次性徹底講透Python中pd.concat與pd.merge,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06python web基礎(chǔ)之加載靜態(tài)文件實例
下面小編就為大家分享一篇python web基礎(chǔ)之加載靜態(tài)文件實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03Python中的defaultdict與__missing__()使用介紹
下面這篇文章主要給大家介紹了關(guān)于Python中defaultdict使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-02-02python實現(xiàn)自動發(fā)送報警監(jiān)控郵件
這篇文章主要為大家詳細介紹了python實現(xiàn)自動發(fā)送報警監(jiān)控郵件,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-06-06