程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

批量給圖片加水印的python腳本

編輯:Python

寫在前面的話:

首先向各位粉絲寶寶道個歉。EICCIE升級大綱的同時,也革新掉了原有大綱中40%的內容,也就意味著同樣作為技術愛好者的我,需要學習40%的新增技能。
這段時間一直在忙著學習新的技術,掌握新的技能。
園區網SDN、廣域網SDN、雲、數據中心、鴻蒙、java、大數據、數據存儲、python、網絡可編程及自動化,這些可愛的玩意兒讓我廢寢忘食,並且忘記了你們,對不起了。
今天主動分享一個實用腳本,以表誠意。

批量給圖片加水印的python腳本

本腳本由達叔編寫,主要用於日常工作及分享的目的。
時間不多,也沒有做優化,湊合用用,好在處理的是不著急的事情。
借用了一個開源的第三方庫,實現批量讀取圖片,然後加水印,然後保存的效果。
如果要使用加水印腳本,您需要自行在python解析環境中安裝腳本中所使用的第三方庫。

導入安裝好的第三方庫

import os
from PIL import Image, ImageDraw, ImageFont

  • 1.
  • 2.

定義一個加水印的函數

#定義函數用於添加水印,font為字體文件,image為通過Image.open()方法打開的圖片對象,text為水印字符串
def AddWaterMark(font, image, text):
# 打開字體文件,自備一個字體文件
Font = ImageFont.truetype(font, 24)
# 添加背景
new_img = Image.new('RGBA', (image.size[0] * 3, image.size[1] * 3), (0, 0, 0, 0))
new_img.paste(image, image.size)
# 添加水印
font_len = len(text)
# 將圖像轉化為RGBA圖像
rgba_image = new_img.convert('RGBA')
# 生成和待添加水印圖片一樣大的圖片
text_overlay = Image.new('RGBA', rgba_image.size, (255, 255, 255, 0))
# 畫圖
image_draw = ImageDraw.Draw(text_overlay)
# 繪制多個水印,設置水印的位置
for i in range(0, rgba_image.size[0], font_len * 20):
for j in range(0, rgba_image.size[1], 50):
# 設置文本顏色和透明度和位置
image_draw.text((i, j), text, font=Font, fill=(255, 102, 102, 80))
# 水印方向設置
text_overlay = text_overlay.rotate(20)
# 將生成的圖片覆蓋到待添加水印的圖片上
image_with_text = Image.alpha_composite(rgba_image, text_overlay)
# 裁切圖片
image_with_text = image_with_text.crop((image.size[0], image.size[1], image.size[0] * 2, image.size[1] * 2))
return image_with_text

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.

定義一個獲取文件對象的函數

#定義函數,獲取當前目錄及子目錄下的所有文件
def GetAllPngs(PngPath, All_IMG_NameList):
CurrentList = os.listdir(PngPath) #讀取當前目錄下所有對象形成列表
for obj in CurrentList: #遍歷列表
Current_path = os.path.join(PngPath,obj) #將所有對象形成絕對路徑
if os.path.isdir(Current_path): #如果是目錄則執行自我迭代
GetAllPngs(Current_path, All_IMG_NameList) #檢查是否有子目錄
elif os.path.isfile(Current_path):
All_IMG_NameList.append(Current_path) #返回絕對路徑和文件名
else:
pass
return All_IMG_NameList

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

定義實參並調用函數完成工作

if __name__ == '__main__':
font = 'd:/mingliu.ttc' #字體文件目錄
text = '乾頤堂達叔出品 www.qytang.com' #要添加的水印文本()
PngPath = 'D:/temp/' #生成的Png圖片目錄
AllPngNameList = [] #用於存儲處理前圖片絕對路徑
GetAllPngs(PngPath, AllPngNameList) #獲取處理前圖片絕對路徑列表
#使用for循環遍歷列表,將每個圖片都加上水印並保存
for IMG in AllPngNameList:
image = Image.open(IMG)
MarkedPng = AddWaterMark(font , image, text)
Result = IMG.replace('jpg', 'png')
MarkedPng.save(Result)

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved