前言

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

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

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

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

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

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

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

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') # 打开原始图片,并转换为RGBnewImg = 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':  # 判断是否为.pngtextMark(filepath) # 批量添加文字水印print('批量添加水印完成')
except:print('请输入一个有效路径……')

左上角添加水印,图例展示:

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') # 将原始图片转换为RGBArgbamark = mark.convert('RGBA') # 将水印图片转换为RGBAimgwidth, imgheight = rgbaim.size # 获取原始图片尺寸nimgwidth, nimgheight = rgbamark.size # 获取水印图片尺寸# 缩放水印图片scale = 10markscale = 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/1000rgbamarkpha = 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':  # 判断是否为.pngimgMark(filepath) # 批量添加图片水印print('批量添加水印完成')
except Exception as e:print(e)

左下角添加图片水印,图例展示:

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

  1. php给图片加图片水印,php给图片添加文字或图片水印实现代码

    原标题:php给图片添加文字或图片水印实现代码 一.文字水印 文字水印就是在图片上加上文字,主要使用gd库的imagefttext方法,并且需要字体文件.效果图如下: $dst_path = 'dst ...

  2. Java 图片添加文字或者logo水印(附代码) | Java工具类

    目录 前言 环境依赖 代码 总结 前言 本文提供java工具类,给图片添加文字或者logo图片的水印效果. 环境依赖 工具库maven依赖添加 <dependency><groupI ...

  3. 手把手教你如何通过Java给图片添加文字和图片水印

    本文首发于个人网站 前言 最近工作上有个需求,动态生成一张图片,具体来说就是基于模版图片动态添加文字和图片(文字内容不同,图片数目不同),其中文字大小不全一样,且对位置有所要求. 本文将剖析多个技术方 ...

  4. thinkphp5.1 || 给图片添加文字,图片水印

    composter下载扩展: https://packagist.org/packages/aliyuncs/oss-sdk-php composer require topthink/think-i ...

  5. php imagick 水印,Imagick库图片添加文字及图片水印

    在上一篇文章中,我们介绍了Imagick库的安装: 这篇文章我们介绍一下Imagick库的基本使用: 如何给图片添加渐变水印,及图片水印. 首先我们要生成一张透明底的画布: // 创建新的画布对象和透 ...

  6. 用jsp给图片添加文字(图片水印)

    原图片: makeContentImage.jsp代码: <%@ page contentType="image/jpeg" pageEncoding="gbk&q ...

  7. html图片加文字批量处理,图片批量加水印工具,图片批量添加文字|图片同时添加文字或图片水印...

    一般在网上下载的图片都会自动带有相应网站的文字或是图片水印,虽然可能在使用图片素材的时候,图片上的水印会在一定程度上影响美观,但是水印是对于版权或者是原创的一个保护,图片水印不仅是可以保护别人的原创图 ...

  8. JAVA 给图片添加文字水印

    水印操作有很多,例如:给图片添加文字.图片水印,给pdf文件添加水印,给文件加盖公章,这类需求还是时常会遇到的,今天就简单记录一下给图片添加文字水印的demo,仅供大家参考,后续会写别的情况的添加水印 ...

  9. python给批量图片添加文字 脚本,Python实现图片添加文字

    在工作中有时候会给图上添加文字,常用的是PS工具,不过我想通过代码的方式来给图片添加文字. 需要使用的Python的图像库:PIL.更加详细的知识点如下: Imaga模块:用来创建,打开,保存图片文件 ...

最新文章

  1. struts2.xml详解
  2. 用 ASP.NET 开发 Web 服务的五则技巧
  3. PHP调用tushare,python调用tushare获取沪股通、深股通成份股数据
  4. CentOS 7 搭建JAVA环境
  5. linux访问nfs端口号,linux nfs配置及访问控制
  6. Maven : Cannot deploy artifact from the local repository
  7. Oracle基础(六) 数据类型
  8. 关于HP C7K的firmware management中的power policy理解
  9. 网页聊天室php无数据库_无需数据库的PHP聊天室程序
  10. (解决)Circular view path [index]: would dispatch back to the current handler URL [] again. Che
  11. 实训3:网络信息筛选
  12. Let's Encrypt证书自动更新
  13. linux系统的midi制作软件,MIDI音乐制作软件(MidiEditor)
  14. 华为云正式推出区块链服务!区块链技术将在数字经济时代大放异彩
  15. 电机控制系统使用标幺值的意义
  16. 对接第三方系统实操经验分享
  17. COI 2020 Pastiri(贪心)
  18. 如何在浏览器查看登录密码
  19. YOLOv3庖丁解牛(一):网络结构
  20. 如何使用记事本编写运行Java程序

热门文章

  1. [HDU6566]The Hanged Man
  2. http://www.rehack.cn/techshare/webbe/php/3391.html
  3. 想要成为一名标准的数据分析师,需要看哪些书
  4. 联想服务器x3850型号,联想x3850X6服务器,联想服务器总代金牌分销
  5. eNSP提示计数器无法使用
  6. VC6.0配置OpenGL
  7. PVE上启用Intel核显的SR-IOV vGPU
  8. [Java Path Finder][JPF学习笔记][2]在Windows Server上安装JPF
  9. pd.read_excel()和 pd.to_excel() 参数详解
  10. 四个凡事:有章可循,有人负责,有据可查,有人监督