zoukankan      html  css  js  c++  java
  • 批量加水印防抄袭,Python轻松搞定!

    一、为什么要为图片添加水印

    在互联网写文章最头疼的一件事情就是发表的文章容易被抄袭,各种抄袭的手段真的是层出不穷。无奈,只能在不影响阅读体验的情况下不断地提高反抄袭的难度。虽然防不住,但是为文章中的图片添加水印,至少能够保证文章被抄袭之后,读者还能知道文章的来源网站,但是一个一个加水印实在太麻烦,而且假的水印很容易被截掉。

    索性,我们就用Python来完成一个图片水印批量添加程序的开发。

    二、利用Python为图片添加水印

    图片添加图片水印的原理其实很简单,在一个空白的画布上依次将原图像和水印添加添加进去即可。

    在Python中,我们可以借助PIL模块轻松地实现图片水印的添加。

    下面,我们通过代码来演示一下。

    遍历文件夹下所有图片文件

    首先我们需要获取一个目录下的所有文件,提取出其中的图像文件,这一步通过内置的os模块即可实现,代码如下所示:

     import os
     
    img_suffix_list = ['png', 'jpg', 'bmp']
     
    for i in os.listdir(r"C:Usersyang9Desktop"):
     
    if i.split('.')[-1] in img_suffix_list:
     
    print(i)

    运行上述代码,我们将获取选定目录下后缀名为png、jpg、bmp的图形文件,其效果如下图所示:

    为图片添加图片水印

    下面这一步,我们为图片添加图片水印。这一步需要借助的PIL的Image类来实现。

    首先,读取原始图片和水印图片,并获取原始图片的大小,

    然后我们新建一个图层,其大小为原始图片的大小,并将水印图片添加到图层上:

     wm_position = (img_size[0]-wm_size[0],img_size[1]-wm_size[1]) # 默认设定水印位置为右下角
     
    layer = Image.new('RGBA', img.size) # 新建一个图层
     
    layer.paste(watermark, wm_position) # 将水印图片添加到图层上

    接着,我们对图层和原始图片进行合成:

    mark_img = Image.composite(layer, img, layer)

    最后,调用save方法,将新图片保存到本地:

    mark_img.save(save_path + new_file_name)

    这样,一个添加了水印的图片就生成了。

    我们将其整合为两个函数,方便调用,代码如下所示:

     # coding:utf-8
     
    import os,traceback
     
    from PIL import Image
     
     
     
    # 获取文件夹图片
     
    def get_folder(fpath,wm_file,save_path):
     
    try:
     
    img_suffix_list = ['png', 'jpg', 'bmp']
     
    for i in os.listdir(fpath):
     
    if i.split('.')[-1] in img_suffix_list:
     
    img_path = fpath + '/' + i
     
    img_water_mark(img_file=img_path,wm_file=wm_file,save_path=save_path)
     
    except Exception as e:
     
    print(traceback.print_exc())
     
     
     
    # 图片添加水印
     
    def img_water_mark(img_file, wm_file,save_path):
     
    try:
     
    img = Image.open(img_file) # 打开图片
     
    watermark = Image.open(wm_file) # 打开水印
     
    img_size = img.size
     
    wm_size = watermark.size
     
    # 如果图片大小小于水印大小
     
    if img_size[0] < wm_size[0]:
     
    watermark.resize(tuple(map(lambda x: int(x * 0.5), watermark.size)))
     
    print('图片大小:', img_size)
     
    wm_position = (img_size[0]-wm_size[0],img_size[1]-wm_size[1]) # 默认设定水印位置为右下角
     
    layer = Image.new('RGBA', img.size) # 新建一个图层
     
    layer.paste(watermark, wm_position) # 将水印图片添加到图层上
     
    mark_img = Image.composite(layer, img, layer)
     
    new_file_name = '/new_'+img_file.split('/')[-1]
     
    mark_img.save(save_path + new_file_name)
     
    except Exception as e:
     
    print(traceback.print_exc())

    这样,我们通过一个函数get_folder(),指定图片的目录,水印图片的位置以及新图片保存的位置就可以了。运行代码,其效果如下动图所示:

    三、利用QT for Python制作图片水印添加程序

    代码写好了之后,我们就可以很方便地借助其进行批量添加图片水印的操作了。虽然很方便,但是如果能够有一个图形用户界面的客户端程序供我们使用,那就更加好了。

    在这里还是要推荐下我自己建的Python学习群:609616831,群里都是学Python的,如果你想学或者正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2020最新的Python进阶资料和零基础教学,欢迎进阶中和对Python感兴趣的小伙伴加入!

  • 相关阅读:
    leetCode 53. maximum subarray
    leetcode strStr()
    DCNN models
    1*1 的卷积核
    leetcode 14. longest common prefix
    springMVC接受json并打开新页面
    jsp取addFlashAttribute值深入理解即springMVC发redirect传隐藏参数
    hive安装教程本地模式
    poi excel超出65536行数限制自动扩展Invalid row number (65536) outside allow
    java 构造json对象数组
  • 原文地址:https://www.cnblogs.com/python-miao/p/14285788.html
Copyright © 2011-2022 走看看