图片批量添加logo

2021-02-15  本文已影响0人  巴鶴

前言

我们浏览百度搜索,微博查看,总会看到形形色色的各种美图,有时想下载下来供自己晒图或者发朋友圈时使用,但是总会发现美图带有创造者的logo标志,类似这种带Logo的图片,一来为了宣传,二来防止收割党盗用。本实例分享如何批量为图片添加图片水印。给自己的喜爱的美图带上自己专属的logo。

思路分析

初始图片

金牛拜年 (2).png
仙剑2.png
早安阳光.png

代码参考

# -*- coding: utf-8 -*-
"""
@Time : 2021/2/13 16:11
@Auth : Yvon~早安阳光
@File :tupshuiyin
"""
from PIL import Image
import os
path = input('请输入要添加水印的图片所在路径:')
impath = input('请输入要作为水印图片的路径:')
positionflag = int(input('请输入水印位置(0:左上角,1:左下角,2:右上角,3:右下角,4:居中):'))
alphavalue = int(input('请输入水印透明度(范围在1――10之间):'))

# 图片水印
def imgMark(img):
    im = Image.open(img) #打开原始图片
    mark = Image.open(impath) #打开水印图片
    rgbaim = im.convert('RGBA')  # 将原始图片转换为RGBA
    rgbamark = mark.convert('RGBA')   # 将水印图片转换为RGBA
    imgwidth, imgheight = rgbaim.size  # 获取原始图片尺寸
    nimgwidth, nimgheight = rgbamark.size  # 获取水印图片尺寸

    # 缩放水印图片
    scale = 10
    markscale = max(imgwidth / (scale * nimgwidth), imgheight / (scale * nimgheight))
    newsize = (int(nimgwidth * markscale), int(nimgheight * markscale))  # 计算新的尺寸大小
    rgbamark = rgbamark.resize(newsize, resample=Image.ANTIALIAS)  # 重新设置水印图片大小
    nimgwidth, nimgheight = rgbamark.size  # 获取水印图片缩放后的尺寸

    # 设置水印图片位置

    if positionflag == 0:  # 左上角
        position = (0, 0)
    elif positionflag == 1:# 左下角
        position = (0, imgheight - nimgheight)
    elif positionflag == 2:  # 右上角
        position = (imgwidth - nimgwidth, 0)
    elif positionflag == 3:  # 右下角
        position = (imgwidth - nimgwidth, imgheight - nimgheight)
    elif positionflag == 4:  # 居中
        position = (int(imgwidth / 2), int(imgheight / 2))
    # 设置透明度:img.point(function)接受一个参数,且对图片中的每一个点执行这个函数,这个函数是一个匿名函数,使用lambda表达式来完成
    # convert()函数,用于不同模式图像之间的转换,模式“L”为灰色图像,它的每个像素用8个bit表示,0表示黑,255表示白,其他数字表示不同的灰度。
    # 在PIL中,从模式“RGB”转换为“L”模式是按照下面的公式转换的:L = R * 299/1000 + G * 587/1000+ B * 114/1000

    rgbamarkpha = rgbamark.convert("L").point(lambda x: x / alphavalue)
    rgbamark.putalpha(rgbamarkpha)
    # 水印位置
    rgbaim.paste(rgbamark, position, rgbamarkpha)
    rgbaim.save(img)  # 保存水印图片

try:
    list = os.listdir(path)  # 遍历选择的文件夹
    for i in range(0, len(list)):  # 遍历文件列表
        filepath = os.path.join(path, list[i])  # 记录遍历到的文件名
        if os.path.isfile(filepath):  # 判断是否为文件
            filetype = os.path.splitext(filepath)[1]  # 获取扩展名
            if filetype == '.png':  # 判断是否为.png
                imgMark(filepath)  # 批量添加图片水印
    print('批量添加图片水印完成')

except Exception as e:
    print(e)
输入参数.png

水印图片

金牛拜年.png
仙剑.png
早安阳光.png
上一篇下一篇

猜你喜欢

热点阅读