前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python实现批量图片添加数字水印

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

作者头像
Python小屋屋主
发布2018-04-16 15:38:33
2.2K0
发布2018-04-16 15:38:33
举报
文章被收录于专栏:Python小屋Python小屋

之前写过一个类似的代码,是把水印信息打散以后随机添加到原图中,并提供了水印信息的提取功能,请参考: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('.')

其中一张效果图:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-10-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档