Python 萬(wàn)能代碼模版:批量搞圖,秀翻全場(chǎng)(上)
“閱讀本文大概需要6分鐘”
你好,我是悅創(chuàng)。
前面我寫了:
Python 萬(wàn)能代碼模版:爬蟲代碼篇 Python 萬(wàn)能代碼模版:數(shù)據(jù)可視化篇 Python 萬(wàn)能代碼模版:自動(dòng)辦公,提升 X10 倍工作效率
最近在準(zhǔn)備拍攝編程類的短視頻,所以耽擱了。接下來(lái)還是和之前一樣,爭(zhēng)取一周一篇,每一篇希望都對(duì)你們有所幫助。
1. 批量給照片加水印
需要首先安裝 opencv、pillow:
pip3 install opencv-python
pip3 install pillow
如果手中有非常多的圖片,想保護(hù)自己版權(quán),或者申明來(lái)源,我們可以在圖片上加水印。那如何用 Python 給非常多的圖片批量加上文字水印呢?
還是以我們?cè)谂老x示例的 3 小節(jié)中批量下載的圖片文件夾為例。
下述代碼會(huì)給該文件夾下所有圖片的 (width/2, height-30) 這個(gè)坐標(biāo)點(diǎn)加上 “@黃家寶|www.aiyc.top” 這個(gè)中文加個(gè)人網(wǎng)址。坐標(biāo)點(diǎn)是以圖片左上角為基準(zhǔn)的。具體的水印大小和位置可以自行調(diào)整,不過(guò)調(diào)錯(cuò),有可能打不上水印噢。
# -*- coding: utf-8 -*-
# @Author: AI悅創(chuàng)
# @Date: 2021-10-02 10:26:52
# @Last Modified by: aiyc
# @Last Modified time: 2021-10-04 20:15:13
import cv2
import numpy
from PIL import Image, ImageDraw, ImageFont
import os
class WaterMark(object):
def __init__(self, OperationFilename=".", output_dir="watermark", textSize=10, watermarkText="水印", textColor="#ffffff", system=False, winfontfile=r"C:\Windows\Fonts\STZHONGS.ttf", macfontfile="/System/Library/Fonts/PingFang.ttc"):
self.OperationFilename = OperationFilename
self.output_dir = output_dir
self.textSize = textSize
self.watermarkText = watermarkText
self.textColor = textColor
self.system = system
self.winfontfile = winfontfile
self.macfontfile = macfontfile
def mkdirs(self):
if not os.path.exists(self.output_dir):
os.makedirs(self.output_dir)
print(f"文件夾 {self.output_dir} 已經(jīng)自動(dòng)為你創(chuàng)建,圖片將保存到:{self.output_dir}")
else:
print(f"文件夾 {self.output_dir} 已經(jīng)存在,圖片將保存到:{self.output_dir}")
def system_font(self):
if not self.system:
return ImageFont.truetype(self.textSize, encoding="utf-8")
if self.system.upper() == "MAC":
# FontFilePath = "/System/Library/Fonts/PingFang.ttc"
return ImageFont.truetype(font=self.macfontfile, size=self.textSize, encoding="utf-8")
elif self.system.upper() == "WINDOWS":
# FontFilePath = r"C:\Windows\Fonts\STZHONGS.ttf"
return ImageFont.truetype(font=self.winfontfile, size=self.textSize, encoding="utf-8")
def parsepath(self):
path_lst = []
# a = os.walk("tips_3/")
root, dirs, files = next(os.walk(self.OperationFilename))
# root, dirs, files = next(os.walk("tips_3/"))
# print(list(a))
for item in files:
file_path = os.path.join(root, item)
# self.process_file(file_path)
path_lst.append(file_path)
return path_lst
def process_file(self, file_path):
img = cv2.imread(file_path)
image_shape = img.shape
height = image_shape[0]
width = image_shape[1]
# print(img.size)
if (isinstance(img, numpy.ndarray)):
img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
draw = ImageDraw.Draw(img)
fontStyle = self.system_font()
# 繪制文本
# textColor = (168, 121, 103)
draw.text((width/2, height-30), self.watermarkText, self.textColor, font=fontStyle)
# draw.text((width/2, height-30), self.watermarkText, fill=self.textColor, font=fontStyle)
# 轉(zhuǎn)換回 OpenCV 類型
img2 = cv2.cvtColor(numpy.asarray(img), cv2.COLOR_RGB2BGR)
# 保存圖片
file_name = file_path.split("/")[-1]
cv2.imwrite(os.path.join(self.output_dir, file_name), img2)
print(f"proceed {file_path}")
def main(self):
self.mkdirs()
path_lst = self.parsepath()
# print(path_lst)
for path in path_lst:
self.process_file(path)
if __name__ == '__main__':
run = WaterMark(
OperationFilename="tips_3/",
output_dir="image_watermark",
textSize=10,
watermarkText="@黃家寶|www.aiyc.top",
textColor="gray",
system="Windows",
winfontfile="JiZiJingDianKaiTiJianFan-.ttf")
run.main()
代碼執(zhí)行完后,可以去 image_watermark 這個(gè)文件夾中查看圖片,可以看到這里的所有圖片都已經(jīng)被打上了文字水印。

替換說(shuō)明:


文字水印的位置,以圖片左上角為原點(diǎn); 想要處理的圖片文件夾名稱 處理完后保存結(jié)果的文件夾名稱,放心這個(gè)會(huì)自動(dòng)創(chuàng)建 水印字體大小 文字水印的內(nèi)容 文字水印的顏色,支持顏色單詞、RGB、十六進(jìn)制顏色 選擇你的操作系統(tǒng)和字體路徑,字體路徑不寫也可以,添加這個(gè)接口主要是為了方便修改自己下載的字體路徑。
代碼連接:https://github.com/AndersonHJB/AIYC_DATA/tree/main/04-批量搞圖,秀翻全場(chǎng)/1.%20批量給照片加水印
“AI悅創(chuàng)·推出輔導(dǎo)班啦,包括「Python 語(yǔ)言輔導(dǎo)班、C++輔導(dǎo)班、算法/數(shù)據(jù)結(jié)構(gòu)輔導(dǎo)班、少兒編程、pygame 游戲開發(fā)」,全部都是一對(duì)一教學(xué):一對(duì)一輔導(dǎo) + 一對(duì)一答疑 + 布置作業(yè) + 項(xiàng)目實(shí)踐等。QQ、微信在線,隨時(shí)響應(yīng)!V:Jiabcdefh
”
黃家寶丨AI悅創(chuàng)
隱形字
攝影公眾號(hào)「悅創(chuàng)攝影研習(xí)社」
在這里分享自己的一些經(jīng)驗(yàn)、想法和見解。
長(zhǎng)按識(shí)別二維碼關(guān)注


