2022年03月21日 15:52 阅读量:1226
在各大网站办理业务,经常要传各种证件,给这些证件添加水印是很有必要的。不啰嗦直接上代码:
第一种:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from PIL import Image, ImageDraw, ImageFont
# 指定要使用的字体和大小;
font = ImageFont.truetype('C:/Windows/Fonts/SimHei.ttf', 36,encoding="utf-8")
# image: 图片 text:要添加的文本 font:字体
def add_text_to_image(image, text, font=font):
rgba_image = image.convert('RGBA')
text_overlay = Image.new('RGBA', rgba_image.size, (255, 255, 255, 0))
image_draw = ImageDraw.Draw(text_overlay)
text_size_x, text_size_y = image_draw.textsize(text, font=font)
# 设置文本文字位置
print(rgba_image)
# text_xy = (rgba_image.size[0] - text_size_x, rgba_image.size[1] - text_size_y) #底部
text_xy = ((rgba_image.size[0] - text_size_x)/2, (rgba_image.size[1] - text_size_y)/3) #中间
# 设置文本颜色和透明度
# image_draw.text(text_xy, text, font=font, fill=(76, 234, 124, 180))
image_draw.text(text_xy, text, font=font, fill=(225, 225, 225, 225))
# text_xy = (rgba_image.size[0] - text_size_x, rgba_image.size[1] - text_size_y) #底部
text_xy = ((rgba_image.size[0] - text_size_x)/2, 2*(rgba_image.size[1] - text_size_y)/3) #中间
# 设置文本颜色和透明度
# image_draw.text(text_xy, text, font=font, fill=(76, 234, 124, 180))
image_draw.text(text_xy, text, font=font, fill=(225, 225, 225, 225))
text_overlay = text_overlay.rotate(-45)
image_with_text = Image.alpha_composite(rgba_image, text_overlay)
return image_with_text
im_before = Image.open("test.jpg")
im_after = add_text_to_image(im_before, u"仅供办理中国版权保护中心各项申请使用")
im_after.show()
im_after.save(u'new_test.jpg',"PNG")
效果图:
第二种:批量添加水印
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys,os,chardet
from PIL import Image, ImageDraw, ImageFont
def add_text_to_image(image, text):
font = ImageFont.truetype('C:/Windows/Fonts/SimHei.ttf', 36)
# 添加背景
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_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*40+100):
for j in range(0, rgba_image.size[1], 200):
image_draw.text((i, j), text, font=font, fill=(0, 0, 0, 50))
# 水印图片旋转45°
text_overlay = text_overlay.rotate(-45)
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
def add_text_combine_imgs(folder_path, txt):
"""
批量添加图片水印
Args:
folder_path (str): 源文件夹
pdf_file_path (str): 输出路径
"""
files = os.listdir(folder_path)
png_files = []
for file in files:
if 'png' in file or 'jpg' or 'JPG' or 'PNG' in file:
png_files.append(file)
for file in png_files:
#png_file = Image.open(file)
#if png_file.mode == "RGBA":
# png_file = png_file.convert("RGB")
print file
img = Image.open(folder_path + file)
im_after = add_text_to_image(img, txt)
shotname, extension = os.path.splitext(file)
im_after.save(folder_path + shotname+"_new"+extension,"PNG")
if __name__ == '__main__':
if len(sys.argv) != 2:
print(u"---图片添加水印---")
print(u"例如: python imgdraw2.py 仅供办理中国版权保护中心各项申请使用")
else:
txt = sys.argv[1]
txt = txt.decode('GB2312')
folder = r"E:\tmp\\"
add_text_combine_imgs(folder, txt)
效果图: