FreeLighting / watermark.py
刘宇轩
updated+
bc342c5
raw
history blame
1.32 kB
from PIL import Image
class WatermarkApp:
def __init__(self):
pass
def process_image(self, image):
watermark = Image.open('asset/zhushe.png')
# 获取水印的等比例缩放尺寸
wm_width, wm_height = watermark.size
target_size = 600
alpha = 0.3
if wm_width > wm_height:
new_wm_width = target_size
new_wm_height = int((wm_height / wm_width) * target_size)
else:
new_wm_height = target_size
new_wm_width = int((wm_width / wm_height) * target_size)
wm = watermark.resize((new_wm_width, new_wm_height), Image.Resampling.LANCZOS)
# 处理透明度
if alpha < 1.0:
wm = self.apply_transparency(wm, alpha)
# 确保原图是RGBA模式
if image.mode != 'RGBA':
image = image.convert('RGBA')
# 在整个图片上铺满水印
for y in range(0, image.height, new_wm_height):
for x in range(0, image.width, new_wm_width):
image.alpha_composite(wm, dest=(x, y))
return image
def apply_transparency(self, watermark, alpha):
"""应用透明度"""
matrix = watermark.split()[-1].point(lambda x: x * alpha)
watermark.putalpha(matrix)
return watermark