您当前的位置:首页 > 计算机 > 编程开发 > Python

Python实现批量图片添加数字水印

时间:09-09来源:作者:点击数:

之前写过一个类似的代码,是把水印信息打散以后随机添加到原图中,并提供了水印信息的提取功能,请参考Python实现图像空域随机水印加入与提取。本文代码功能:为指定文件夹中的所有图像文件批量添加水印,水印位置在左上角、中间、右下角这三个位置中随机选择。

from random import randint

from os import listdir

from PIL import Image

#打开并读取其中的水印像素,也就是不是白色背景的像素

#读到内存中,放到字典中以供快速访问

im = Image.open('watermark.bmp')

width, height = im.size

pixels = dict()

for w in range(width):

    for h in range(height):

        c = im.getpixel((w,h))[:3]

        if c!=(255, 255, 255):

            pixels[(w, h)] = c

def addWaterMark(srcDir):

    #获取当前所有BMP图像文件列表

    picFiles = [fn for fn in listdir(srcDir) if fn.endswith(('.bmp', '.jpg', '.png'))]

    #遍历所有文件,为每个图像添加水印

    for fn in picFiles:

        im1 = Image.open(fn)

        w, h = im1.size

        #如果图片尺寸小于水印图片,不加水印

        if w<width or h<height:

            continue

        #在原始图像左上角、中间或右下角添加数字水印

        #具体位置根据position进行随机选择

        p = {0:(0,0), 1:((w-width)//2, (h-height)//2), 2:(w-width, h-height)}

        position = randint(0,2)

        top, left = p.get(position, (0,0))

        #修改像素值,添加水印

        for p, c in pixels.items():

            im1.putpixel((p[0]+top, p[1]+left), c)

        #保存加入水印之后的新图像文件

        im1.save(fn[:-4] + '_new' + fn[-4:])

#为当前文件夹中的图像文件添加水印

addWaterMark('.')

其中一张效果图:

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门