Python代码学习之给图片添加文字或图片水印

这篇具有很好参考价值的文章主要介绍了Python代码学习之给图片添加文字或图片水印。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

图片加水印有什么好处?在现今的数字化时代,网络上的图片泛滥,盗图现象也越来越严重。因此,在发布文章时,为了保护自己的原创作品版权,很多人选择使用水印来保护他们的图片。这样就能更好地做到:

1.版权保护:在商业用途的照片中添加水印可以帮助保护作者的版权,防止他人未经授权使用照片。

2.品牌推广:将商业品牌、商标或公司标志添加到照片中,可以帮助提高品牌知名度和曝光率。

3.防止盗版:添加水印可以防止盗版和未经授权的使用,因为水印会明显表明该照片的版权归原作者所有。

4.标识来源:在社交媒体平台上分享照片时,添加水印可以帮助其他用户识别出照片的来源和作者。

5.保护隐私:在一些情况下,添加水印可以帮助保护照片中的个人隐私,特别是在共享照片时,可能会有人试图使用照片来滥用或伤害个人隐私。

当然防止滥用是最主要的,我是这么觉得、。

Python代码学习之给图片添加文字或图片水印

PIL的Image模块的基本介绍

Pillow 是 Python 中较为基础的图像处理库,主要用于图像的基本处理,比如裁剪图像、调整图像大小和图像颜色处理等。与 Pillow 相比,OpenCV 和 Scikit-image 的功能更为丰富,所以使用起来也更为复杂,主要应用于机器视觉、图像分析等领域,比如众所周知的“人脸识别”应用 。

Image模块:

Image模块是PIL最基本的模块,其中导出了Image类,一个Image类实例对象就对应了一副图像。同时,Image模块还提供了很多有用的函数。
这里只是初步学习了一些用法与实际操作。

基础函数 简介
open() 打开图片
save(“test.gif”,“GIF”) 保存(新图片路径和名称,保存格式)
show() 显示图片
size 是img图片对象的成员数据,是一个元组,包含了像素宽度和像素高度
Image.new() 生成新的图片
getpixel((1,1)) 获取像素点(1,1)三通道信息
putpixel() 设置像素点三通道信息

Python代码实现文字水印

下面咱们用Python代码讲解下怎么批量给图片添加水印,并用代码实现。

这里使用.png图片格式,

'''
  如何批量为图片添加文字水印
'''
from PIL import Image, ImageDraw, ImageFont,ImageEnhance
path=input('请输入要添加水印的图片所在路径:')
text=input('请输入水印文字:')
positionflag=int(input('请输入水印位置(0:左上角,1:左下角,2:右上角,3:右下角,4:居中):'))
alphavalue=float(input('请输入水印透明度(范围在0——1之间的1位小数):'))
#设置所使用的字体
font = ImageFont.truetype(r'simkai.ttf', 24)

# 文字水印
def textMark(img):
    try:
        im = Image.open(img).convert('RGBA') # 打开原始图片,并转换为RGB
        newImg = Image.new('RGBA', im.size, (255, 255, 255, 0)) # 存储添加水印后的图片
        imagedraw = ImageDraw.Draw(newImg) # 创建绘制对象
        imgwidth, imgheight = im.size # 记录图片大小
        txtwidth=font.getsize(text)[0] # 获取字体宽度
        txtheight = font.getsize(text)[1] # 获取字体高度

        # 设置水印文字位置
        if positionflag == 0: # 左上角
            position=(0,0)
        elif  positionflag == 1: # 左下角
             position=(0,imgheight - txtheight)
        elif  positionflag == 2: # 右上角
            position=(imgwidth - txtwidth,0)
        elif  positionflag == 3: # 右下角
            position=(imgwidth - txtwidth, imgheight - txtheight)
        elif  positionflag == 4: # 居中
            position=(imgwidth/2,imgheight/2)
        # 绘制文字
        imagedraw.text(position, text, font=font, fill="red")
        # 设置透明度
        alpha = newImg.split()[3]
        alpha = ImageEnhance.Brightness(alpha).enhance(alphavalue)
        newImg.putalpha(alpha)
        Image.alpha_composite(im, newImg).save(img,'png') # 保存图片
    except Exception as e:
        print(e)
import os
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
                textMark(filepath) # 批量添加文字水印
    print('批量添加水印完成')
except:
    print('请输入一个有效路径……')

左上角添加水印,图例展示:
Python代码学习之给图片添加文字或图片水印

Python代码实现图片水印

from PIL import Image
path=input('请输入要添加水印的图片所在路径:')
imgpath=input('请输入要作为水印图片的路径:')
positionflag=int(input('请输入水印位置(0:左上角,1:左下角,2:右上角,3:右下角,4:居中):'))
alphavalue=int(input('请输入水印透明度(范围在1——10之间):'))

# 图片水印
def imgMark(img):
    im = Image.open(img) # 打开原始图片
    mark = Image.open(imgpath) # 打开水印图片
    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) # 保存水印图片

import os
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)

左下角添加图片水印,图例展示:
Python代码学习之给图片添加文字或图片水印文章来源地址https://www.toymoban.com/news/detail-489482.html

到了这里,关于Python代码学习之给图片添加文字或图片水印的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 100天精通Python(实用脚本篇)——第112天:图像处理批量给图片添加水印,防盗必备建议收藏!!!(附上脚本代码)

    🔥🔥 本文已收录于 《100天精通Python从入门到就业》:本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整教学,从0到100的不断进阶深入,后续还有实战项目,轻松应对面试,专栏订阅地址:

    2024年01月23日
    浏览(32)
  • python3去除图片中的文字水印

    以下为代码: 可根据水印颜色,将np.clip(1.4 * img + 20, 0, 255)中的1.4更改为1.1~1.7,20更改为-40~40,从而达到更好的效果。

    2024年01月25日
    浏览(13)
  • 通过Python的PIL库给图片添加图片水印

    大家好,我是空空star,本篇给大家分享一下通过Python的PIL库给图片添加图片水印。 上一篇已经介绍过了PIL库是什么?安装PIL 、查看PIL版本,这里就不再介绍了。 这里我去C站首页找了一个,看起来是不是很酷。 7.1调整前 7.2调整后 8.1左上 8.2左下 8.3右上 8.4右下 8.5中间 其他位

    2023年04月19日
    浏览(21)
  • 通过Python的PIL库给图片添加文本水印

    大家好,我是空空star,本篇给大家分享一下通过Python的PIL库给图片添加文本水印。 PIL是Python Imaging Library的缩写,它是Python语言中常用的图像处理库之一。它提供了丰富的图像处理功能,包括打开、保存、裁剪、旋转、缩放等操作,并支持多种图像格式。 Name: Pillow Version: 9

    2023年04月19日
    浏览(17)
  • 通过Python的filestools库给图片添加全图水印

    大家好,我是空空star,本篇给大家分享一下通过Python的filestools库给图片添加全图水印。 filestools目前包含四个工具包,分别是树形目录显示、文件差异比较、图片加水印和curl请求转python代码。 Name: filestools Version: 0.1.3 Summary: 仿Linux的tree命令、文件差异比较工具、图片加水印

    2023年04月27日
    浏览(20)
  • 封装图片处理工具类,实现图片的裁剪、压缩、图片水印、文字水印、多行文字水印等功能

    目录 一、前言 二、工具类的依赖和简单介绍 1、添加依赖 2、简单的使用 3、加载需要处理的图片 4、添加图片处理规则 4.1 Builder的方式 4.2 使用规则工厂的方式 5、输出处理后的图片 三、使用方式 1、图片裁剪 图片裁剪规则实体类 1.1 按长宽裁剪 1.1.1 示例代码 1.1.2 实现效果

    2024年02月13日
    浏览(11)
  • Java pdf添加文字水印

    最近在开发一个项目,其中就有导出的功能,而甲方提了一个需求,要对导出的pdf加文字水印,所以我就加班了整整10分钟肝出了这个功能,既然做出来了就和大家分享一下吧,拿走不谢!!! 总共就三步,非常简单 1.导入maven依赖 2.PDF增加水印工具类 3.运行工具类下面的m

    2024年02月12日
    浏览(19)
  • 如何通过C++ 给PDF文档添加文字水印

    因PDF文档具有较好的稳定性和兼容性,现在越来越多的合同、研究论文、报告等都采用PDF格式。为了进一步保护这些重要文档内容免受未经授权的复制或使用,我们可以添加水印以表明其状态、所有权或用途。针对工作中可能出现的在 C++ 应用程序中给 PDF 文档添加文字水印的

    2024年02月05日
    浏览(15)
  • 基于pdfbox实现的pdf添加文字水印工具

    最近有个需求需要给pdf加文字水印,于是开始搜索大法,但是发现网络上的代码基本都是将字体文件直接放在jar包里面。个人强迫症发作(手动狗头),想要像poi一样直接加载系统字体,于是研究了一下午pdfbox的源代码,发现 FontFileFinder 类可以实现这个功能。废话不多说,直

    2023年04月11日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包