123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- """
- 图片嵌入水印工具类
- """
- from watermark_generate.blind_watermark import WaterMark
- from watermark_generate.tools import logger_tool
- logger = logger_tool.logger
- class PictureWatermarkEmbeder:
- def __init__(self, secret):
- """
- 初始化图片盲水印嵌入器
- :param secret: 密码标签
- """
- self.bwm = WaterMark(password_img=1, password_wm=1)
- self.bwm.read_wm(secret, mode='str')
- self.secret = secret
- self.dest_img = None
- def embed(self, src_img, dest_img):
- """
- 盲水印嵌入方法
- :param src_img: 原始图片位置
- :param dest_img: 嵌入图片存放位置
- """
- self.bwm.read_img(src_img)
- self.bwm.embed(dest_img)
- self.dest_img = dest_img
- logger.debug(f'嵌入图片位置{self.dest_img}')
- def verify(self) -> bool:
- """
- 验证嵌入结果,检查嵌入的字符串与提取字符串是否一致
- :return: 嵌入结果
- """
- wm_extract = self.bwm.extract(self.dest_img, wm_shape=self.bwm.wm_size, mode='str')
- logger.debug(f'初始水印{self.secret},水印长度{self.bwm.wm_size},水印提取{wm_extract}')
- return wm_extract == self.secret
- def extract(embed_img, secret_len=512):
- bwm = WaterMark(password_img=1, password_wm=1)
- # todo 根据生成的密码标签长度修改此处计算水印长度函数
- secret = bwm.extract(embed_img, wm_shape=get_wm_bit(secret_len), mode='str')
- logger.debug(f'水印长度{get_wm_bit(secret_len)},水印提取{secret}')
- return secret
- def get_wm_bit(len):
- return len * 8 - 2
|