FreeLighting / watermark.py
刘宇轩
watermark+
a7edb0c
from PIL import Image
# class WatermarkApp:
# def __init__(self):
# pass
# def process_image(self, image):
# watermark = Image.open('asset/chaojihui-v2.png')
# # 获取水印的等比例缩放尺寸
# wm_width, wm_height = watermark.size
# import random
# # target_size = random.randint(100, 300)
# target_size = 100
# 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
class WatermarkApp:
def __init__(self):
pass
def process_image(self, image):
watermark = Image.open('asset/chaojihui-v2.png')
# 获取水印的等比例缩放尺寸
wm_width, wm_height = watermark.size
import random
# target_size = random.randint(100, 300)
target_size = 100
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)
double_image = Image.new('RGBA', (image.width * 2, image.height * 2), (0, 0, 0, 0))
for y in range(0, double_image.height, new_wm_height):
for x in range(0, double_image.width, new_wm_width):
double_image.alpha_composite(wm, dest=(x, y))
angle = random.uniform(-180, 180)
double_image = double_image.rotate(angle)
print(double_image)
double_image = double_image.crop((image.width//2, image.height//2, (image.width*3)//2, (image.height*3)//2)).resize(image.size, Image.Resampling.LANCZOS)
print(double_image)
# 确保原图是RGBA模式
if image.mode != 'RGBA':
image = image.convert('RGBA')
image.alpha_composite(double_image, dest=(0, 0))
return image
def apply_transparency(self, watermark, alpha):
"""应用透明度"""
matrix = watermark.split()[-1].point(lambda x: x * alpha)
watermark.putalpha(matrix)
return watermark