python程序,用来批量添加图片水印。输入一个文件夹、水印位置(左下角、底部中间、右下角)、用户名(用户名是中文的),批量给文件夹里所有的jpg和png图片在指定位置添加水印。

水印内容是:用户名 拍摄时间 拍摄地点。其中用户名是入参,拍摄时间和地点都从照片里读出来,如果读不出来拍摄时间的话就用文件最近修改时间代替,如果读不出来地点就留空。

'''

输入: 1.文件夹

2.水印位置

3.用户名

输出:1.用户名

2.拍摄时间

3.拍摄地点

'''

from PIL import Image, ImageDraw, ImageFont, ImageOps

import imghdr

import os

import exifread

import time as ostime

class AddWaterMark(object):

def __init__(self, file_name, location, user):

self.file_name = file_name

self.location = location

self.user = user

# 防止图片发生旋转

def exif_transpose(self, img):

if not img:

return img

exif_orientation_tag = 274

# Check for EXIF data (only present on some files)

if hasattr(img, "_getexif") and isinstance(img._getexif(), dict) and exif_orientation_tag in img._getexif():

exif_data = img._getexif()

orientation = exif_data[exif_orientation_tag]

if orientation == 1:

pass

elif orientation == 2:

img = img.transpose(Image.FLIP_LEFT_RIGHT)

elif orientation == 3:

img = img.rotate(180)

elif orientation == 4:

img = img.rotate(180).transpose(Image.FLIP_LEFT_RIGHT)

elif orientation == 5:

img = img.rotate(-90, expand=True).transpose(Image.FLIP_LEFT_RIGHT)

elif orientation == 6:

img = img.rotate(-90, expand=True)

elif orientation == 7:

img = img.rotate(90, expand=True).transpose(Image.FLIP_LEFT_RIGHT)

elif orientation == 8:

img = img.rotate(90, expand=True)

return img

# 获取文件夹下的所有jpg、png图片

def get_all_pic(self):

imgType_list = {'jpg','bmp','png','jpeg','rgb','tif'}

# imghdr 可以用来判断文件是否是图片

for item in os.listdir(self.file_name):

if os.path.isfile(item):

if imghdr.what(item) in imgType_list:

self.add_watermark_content(item)

# 水印位置

def get_watermark_location(self, img):

width, height = img.size # 图片大小

fnt_size = max(width//50, height//50) # 字体大小

if self.location == '左下角':

return (0, height-fnt_size*5)

elif self.location == '右下角':

return (width-fnt_size*12, height-fnt_size*5)

else: # 底部中间

return (width//2-fnt_size*6, height-fnt_size*5)

# 获取照片拍摄时间

def get_pic_time(self, img_name):

img = exifread.process_file(open(img_name,'rb'))

if 'Image DateTime' in img.keys():

time = img['Image DateTime'] # 拍摄时间

else:

file_path = os.path.join(self.file_name, img_name)

time = ostime.ctime(os.stat(file_path).st_mtime) #文件的修改时间

return time

# 获取照片拍摄位置

def get_pic_address(self, img_name):

img = exifread.process_file(open(img_name,'rb'))

if 'GPS GPSLatitude' in img.keys():

latitude = img['GPS GPSLatitude']

else:

latitude = ''

if 'GPS GPSLongitude' in img.keys():

longitude = img['GPS GPSLongitude']

else:

longitude = ''

position = f'{latitude}\n{longitude}\n'

return position

# 设置水印内容

def set_content(self, img_name):

user = self.user

time = self.get_pic_time(img_name)

position = self.get_pic_address(img_name)

content = f'{user}\n{time}\n{position}\n'

return content

# 添加水印的内容

def add_watermark_content(self, img_name):

img = Image.open(img_name)

# 防止图片发生旋转

# if hasattr(ImageOps, 'exif_transpose'):

# img = ImageOps.exif_transpose(img)

# else:

# img = self.exif_transpose(img)

# img = img.convert('RGB')

draw = ImageDraw.Draw(img)

# 字体和大小

fnt_size = max(img.size[0]//50, img.size[1]//50)

font = ImageFont.truetype('C:\Windows\Fonts\simkai.ttf', size=fnt_size)

# 水印位置

(x,y) = self.get_watermark_location(img)

# 水印内容

content = self.set_content(img_name)

# 位置,内容,字体,颜色,可以自行调节到合适

draw.text((x,y), content, font=font, fill=(255, 255, 255))

draw.text((x+2, y+2), content, font=font, fill=(0, 0, 0))

self.save_watermark_pic(img, img_name)

# 保存水印图片

def save_watermark_pic(self, img, img_name):

new_file = os.path.join(self.file_name, '水印图片')

if not os.path.exists(new_file):

os.mkdir(new_file)

img.save(os.path.join(new_file, img_name), quality=95)

if __name__ == "__main__":

file_name = 'D:\Desktop\picture' # 文件名称

location = '左下角' # 水印位置:左下角、底部中间、右下角

user = '超级无敌奥特曼' # 用户名

WM = AddWaterMark(file_name, location, user)

WM.get_all_pic()

print('hello world...')

python添加图片水印_python 批量添加图片水印相关推荐

  1. python生成器 图片分类_python批量处理图片图片Python迭代器和生成器介绍

    Python迭代器和生成器介绍迭代器 迭代器是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前进到下一结果,而在一系列结果的末尾是,则会引发StopIteration ...

  2. python查找图片区域_python批量识别图片指定区域文字内容

    python批量识别图片指定区域文字内容,供大家参考,具体内容如下 简介 对于一张图片,需求识别指定区域的内容 1.截取原始图上的指定图片当做模板 2.根据模板相似度去再原始图片上识别准确坐标 3.根 ...

  3. python button使用方法_python 批量添加的button 使用同一点击事件的方法

    python 批量添加的button 使用同一点击事件根据传递的参数进行区分. def clear_text(): print '我只是个清空而已' def clear_text(index): pr ...

  4. python 修改图片尺寸_python 批量修改图片大小

    一个文件夹下面有好多图片格式是jpg大小是1920*1080,把它们处理成1280*720并按原先图片的名保存在另一路径下 这里首先要找到给定路径下所有的图片文件,然后在修改图片文件的大小,这里用到P ...

  5. python批量转换图片格式_python批量将图片转换为JPEG格式

    标签: # -*- coding:utf-8 -*- import os from PIL import Image def resize(path): filelist = os.listdir(p ...

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

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

  7. 如何用python批量处理图片大小_python批量修改图片大小的方法

    本文实例为大家分享了python批量修改图片大小的具体代码,供大家参考,具体内容如下 引用的模块 from PIL import Image Image的使用 def resize_image(img ...

  8. python水印_Python如何为图片添加水印

    添加水印的主要目的是为了版权保护,使自己的图像不被抄袭或者恶意转载.网上有很多制作水印的工具,本帖介绍怎么使用Python-Pillow库给图片添加水印. 使用ImageMagick添加图片水印-Li ...

  9. python批量导入图片_Python批量导入图片生成PowerPoint 2007+文件

    原标题:Python批量导入图片生成PowerPoint 2007+文件 说明:本文是"Python批量爬取微信公众号文章中的图片"的后续文章,用来把从公众号批量抓取的图片还原为P ...

最新文章

  1. Snowball 关系提取,2篇知乎博客
  2. Tensorflow官方文档中文版——第一章
  3. Python常用的六款编程开发工具汇总!
  4. Spring FactoryBean的开发1
  5. 物理竞赛得奖学计算机,物理竞赛林紫琪带你探索清华学堂计算机科学实验班”(姚班)...
  6. 利用三层交换机实现VLAN间路由配置
  7. 欧几里得范数_从范数到正则化
  8. python安装地是什么_如何安装python
  9. python websocket django vue_Django资料 Vue实现网页前端实时反馈输出信息
  10. 利用阿里云LAMP环境搭建搭建wiki知识库
  11. python、java、C三种方法打印乘法表
  12. 正常网页开发如何解除父容器中子容器的浮动问题
  13. 西门子STEP7-200PLC的顺序控制编程
  14. 微软原版win10系统启动盘的使用
  15. 数据增强:模拟雨天算法Python
  16. Unity编辑器修改图片的大小
  17. 一款英国折叠车如何在中国城市流行?
  18. 企业微信内自创建app 获取用户信息问题
  19. macOS中快速打开终端
  20. arcgis弧段怎么加很多点_关于ArcGIS的这62个常用技巧,你造吗?

热门文章

  1. 风控建模二:建模方案拟定
  2. TCP发送和接收数据
  3. 第29章 跨战区大PK
  4. 基于大规模语料的新词发现算法【转自matix67】
  5. “忠诚僚机”不应该“忠诚”
  6. pdf转格式怎么转换?其实很简单,看这里就会!
  7. UE4 Rendering Dependency Graph
  8. python 散点图 不同颜色_在matplotlib上的散点图中为每个系列设置不同的颜色
  9. 和平精英android怎么写符号,和平精英名字特殊符号怎么打 特殊符号输入技巧
  10. 【报告分享】2021美妆个护线上消费趋势解读与行业机会展望-数据威(附下载)