forked from shibing624/python-tutorial
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwatermark.py
More file actions
56 lines (43 loc) · 1.69 KB
/
watermark.py
File metadata and controls
56 lines (43 loc) · 1.69 KB
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# -*- coding: utf-8 -*-
"""
@author:XuMing([email protected])
@description:
"""
from PIL import Image, ImageDraw
# 指定要使用的字体和大小;黑体,24号
# font = ImageFont.truetype('heiti.ttf', 24)
# image: 图片 text:要添加的文本 font:字体
def add_text_watermark(image_path, text, font=None):
image = Image.open(image_path)
rgba_image = image.convert('RGBA')
text_overlay = Image.new('RGBA', rgba_image.size, (255, 255, 255, 0))
# (255,255,255,0):第四个是图片的透明度,值越大,越浅
image_draw = ImageDraw.Draw(text_overlay)
print(rgba_image)
# 设置文本文字位置
text_xy = (rgba_image.size[0] - 80, rgba_image.size[1] - 80)
# 设置文本颜色和透明度
image_draw.text(text_xy, text, fill=(87, 250, 255, 360), font=None)
# (87,250,255,360)第四个是文字的透明度,值越大,越深
out = Image.alpha_composite(rgba_image, text_overlay)
return out
def add_logo_watermark(src_path, mask_path, rate=0.1):
im = Image.open(src_path)
mask = Image.open(mask_path)
h, w = im.size[0], im.size[1]
if w > h:
limit = int(w * rate)
else:
limit = int(h * rate)
mask = mask.resize((limit, int(limit * mask.size[1] / mask.size[0])))
layer = Image.new('RGBA', im.size, (0, 0, 0, 0))
layer.paste(mask, (im.size[0] - 80, im.size[1] - 60))
out = Image.composite(layer, im, layer)
return out
if __name__ == '__main__':
image_path = './search/data/images/car-1.jpg'
mask_path = './search/data/images/car-2.jpg'
im_after = add_text_watermark(image_path, 'world')
im_after.show()
im_after_logo = add_logo_watermark(image_path, mask_path)
im_after_logo.show()