• Python工具箱系列(五十三)


    ​​水印

    水印是一种常见的图片处理需求。当既需要展示,又需要保护知识产权时,就需要使用文字或者图片来打水印。下面的代码展示了文字水印与图片水印的过程。

    ​--javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

    1. from pathlib import Path
    2. from PIL import Image, ImageDraw, ImageFont, ImageGrab
    3. def screenshot(box=None, outputfilename='screen.png'):
    4. """
    5. 屏幕截图
    6. Args:
    7. box (object, optional): 屏保的矩形位置
    8. outputfilename (str, optional): 要输出的文件
    9. """
    10. if not box:
    11. # 全屏
    12. im = ImageGrab.grab()
    13. else:
    14. im = ImageGrab.grab(box)
    15. im.save(outputfilename)
    16. def genwatername(inputname):
    17. """
    18. 根据
    19. Args:
    20. inputname (string): 原始图片文件名
    21. Returns:
    22. string: 生成水印后的文件名
    23. """
    24. p = Path(inputname)
    25. return Path.joinpath(p.parent, f'{p.stem}-water.png')
    26. def textwater(inputimage, text, rotatedegree=0):
    27. """
    28. 给图片加上文字
    29. truetype设置字体、文字大小
    30. stxingka.ttf华文行楷 simkai.ttf 楷体 simli.ttf 隶书
    31. Args:
    32. inputimage (string): 要加文字水印的图片
    33. text (string): 要加入的文字
    34. """
    35. font = ImageFont.truetype("C:\\WINDOWS\\Fonts\\simkai.ttf", 100)
    36. # 生成一个一样大的文字图片
    37. img = Image.open(inputimage)
    38. img_txt = Image.new('RGBA', img.size, (0, 0, 0, 0))
    39. draw = ImageDraw.Draw(img_txt)
    40. draw.text((50, 200), (text), fill=(255, 255, 255, 255), font=font)
    41. img_txt = img_txt.rotate(rotatedegree)
    42. # 进行图片合成,两个图片必须具有相同的mode和size
    43. img_wm = Image.alpha_composite(img.convert('RGBA'), img_txt)
    44. img_wm.save(genwatername(inputimage))
    45. def figwater(inputimage, maskimage):
    46. """
    47. 给图片加水印图片(例如公司的LOGO等)
    48. Args:
    49. inputimage (string): 原图
    50. maskimage (string): 水印图片
    51. """
    52. img = Image.open(inputimage)
    53. # 加图片水印
    54. img_logo = Image.open(maskimage).reduce(8)
    55. img_mask = Image.new('RGBA', img.size, (0, 0, 0, 0))
    56. img_mask.paste(img_logo, (260, 80))
    57. img_wm = Image.alpha_composite(img.convert('RGBA'), img_mask)
    58. # 保存水印图片
    59. img_wm.save(genwatername(inputimage))
    60. targetfilename = r'd:\test\fullscreen.png'
    61. screenshot(outputfilename=targetfilename)
    62. textwater(targetfilename, '宁在一思进,莫在一思停')
    63. targetfilename = r'd:\test\11.jpeg'
    64. figwater(targetfilename, r"D:\test\logo-full.png")

    此时文字文印的效果如下图所示。

    其中背景图是使用PIL截屏而来。在文字水印时,必须指定中文字体的位置。图片水印其实是2个图片的融合。在本例中要先准备好一张公司的logo图如下所示。

    随后与目标图相融合,效果如下所示。

    事实上,可以从本例出发,将公司的LOGO放在再小一些,旋转后复制多次,就可以形成更复杂的水印效果。水印与散列很类似,是一个单向的过程,水印极难去除,即使网上号称的去码神器其实效果真的一般,而且一些基于AI的也只是“合理”的猜想,不是真正的还原。

  • 相关阅读:
    征信查询自动化软件机器人,提升效率、降低错误率
    SQL注入漏洞(postgresql注入)
    智慧养殖物联网远程管控系统平台
    【Web项目实战】Cfeng.net基于MinIO的文件服务和支持markdown编辑的笔记服务
    开源一个反sql注入的asp.net core中间件
    java高考填报志愿综合参考系统springboot+vue
    java毕业设计选题基于SSM项目源码实现的校园食堂点餐|订餐系统
    在Windows系统上实现电脑IP更改
    软件项目验收测试范围和流程,这些你都知道吗?
    神经网络:基本概念、模型与技术
  • 原文地址:https://blog.csdn.net/shaanxihualu/article/details/139747163