python图片批量处理器_用python给图片批量打水印
之前写菲律宾游记,想给自己的照片批量打上水印,首先想到的就是用Python实现给图片加文字,然后写个循环。
做过图像识别的,应该知道OpenCV,其中cv2.putText()函数,就可以实现在图片上加文字,非常简单。
putText(img, text, org, fontFace, fontScale, color, thickness, lineType, bottomLeftOrigin)
参数解释:
img:需要添加文字的图片。
text:要加的文字内容。
org:文字的位置坐标。
fontFace:字体类型(可选择字体有限,可设置斜体)。
fontScale:字体大小。
color:字体颜色。
thickness:字体粗细。
lineType:线型。
bottomLeftOrigin:默认值为false,图片数据原点在左上角。
但putText()有个问题,不能添加中文文字,也不能指定字体,而PIL(Python Image Library)可以解决这个问题。
Image模块
Image是PIL中的核心模块,实现对图片的基础操作。
Image中的函数:
- Image. open(path):打开现成的图片,该图片在path所示的路径中。
- Image. new(mode, size, color):创建新的图片文件,color默认为黑色。
Image对象的属性:
- image.format:查看图像的格式,常见的有JPG、PNG等。
- image.mode:查看图像的模式。常用的例如RGB,3x8位像素,为真彩色;RGBA,4x8位像素,有透明通道的真彩色。
- image.size:获取图片的尺寸(长×宽),该二元组也表示图片的像素。
import osimport sysfrom PIL import Image, ImageFont, ImageDraw# 读入要打水印的照片image = Image.open('./input/IMG_1422.jpg')im_size = image.sizeprint(image.format)print(image.mode)print(im_size)image.show()----------------------[out] JPEG[out] RGB[out] (1536, 2048)
原始照片:
ImageDraw模块
ImageDraw模块,提供对图像进行绘制的方法。
- ImageDraw.Draw(image):创建画刷。
- ImageFont.truetype(file, size) :设置字体和大小,file提供字体的路径,size为文字大小。在C盘(系统盘)-Windows-Fonts里面,有计算机上安装的所有字体,选一个喜欢的。
- draw.text(xy, text, fill, font):根据位置、内容、颜色、字体把文字写进图片中。 xy:位置,即距离图片左上角起始点的坐标。 这里普及一下图片坐标系统的概念。 图片坐标常用二元组(x,y),(0,0)位于左上角。 四元组表示图片左、上、右、下的坐标,例如800x600像素的长方形图片表示为(0,0,800,600)。 text:字符串,即文字内容。 fill:文字颜色。 font:字体和大小,通过上述ImageFont来定义。
用draw.text()加水印文字,特别简单!
########### 加文字 ###########draw_txt = ImageDraw.Draw(image)txt_size = int(im_size[0]*0.02)# 设置字体和文字大小chi_font = ImageFont.truetype('./font/fzstk.ttf', size=txt_size)# 直接在照片上写文字draw_txt.text(xy = (im_size[0]//2-txt_size//2,im_size[1]-int(txt_size*1.2)), text = '@化简可得', font = chi_font)image.show()
Image中的方法
- image.show():展示图像,Win系统下show会打开系统自带的图像显示程序。
- image.transpose(method):图像翻转或者旋转,例如ROTATE_90表示将图像逆时针旋转90°。
- image. thumbnail (size):制作缩略图,参数size指定最大的宽度和高度。
- image.paste(region, box, mask):将一张图粘贴到另一张图上。 image:底图; region:要粘贴上底图的图,即水印图片; box:要粘贴的位置,2元组表示左上角坐标; mask:对应的模板图像来填充所对应的区域,模板图像的尺寸必须与region对应的图像尺寸一样,原图像和模板图像可以为同一个图。
- image. save(path, quality):针对JPG格式,quality参数表示保存图像的质量,值的范围从1(最差)到95(最佳)。 默认值为75,此时图片会被压缩。
用image.paste()加水印图,也特别简单!
########### 加图片 ############ 读入水印图# 还没设计过自己的水印logo,所以随便在网上找了一个小太阳做示范mark_image = Image.open('./sun.png')# 这个小太阳有点大,压缩一下mark_image.thumbnail((150, 150)) # 将小太阳加在照片左上角的位置position = mark_size//3, mark_size//3 image.paste(mark_image, position, mark_image)image.show()
小结
新建watermark文件夹,该文件夹下放入Python文件,并新建3个子文件夹:
1. font文件夹存放字体;
2. input存放原始图片;
3. output文件夹为空,程序跑完后打好水印的图片会输出到该文件夹。
跑批代码,下面自取~
########## 批量加水印文字 #########import osimport sysfrom PIL import Image, ImageFont, ImageDrawdef add_watermark(image_file): image = Image.open(image_file) draw_txt = ImageDraw.Draw(image) im_size = image.size print('原始图片尺寸:',im_size) if im_size[0]>im_size[1]: #如果是横版 txt_size = int(im_size[0]*0.02) else: txt_size = int(im_size[1]*0.02) print('水印文字尺寸:',txt_size) # 设置字体和文字大小 chi_font = ImageFont.truetype('./font/fzstk.ttf', size=txt_size) # 直接在照片上写文字 draw_txt.text(xy = (im_size[0]//2-txt_size//2, im_size[1]-int(txt_size*1.2)), text = '@化简可得', font = chi_font) name = os.path.basename(image_file) new_name = os.path.join('.output', name) image.save(new_name, quality=95)### 循环读入照片files = os.listdir('.input')for file in files: image_file = os.path.join('.input', file) print(image_file) add_watermark(image_file)
########## 批量加水印照片 #########import osimport sysfrom PIL import Image, ImageFont, ImageDraw# 读入水印图mark_image = Image.open('./sun.png')def add_watermark(image_file): image = Image.open(image_file) im_size = image.size print('原始图片尺寸:',im_size) if im_size[0]>im_size[1]: #如果是横版 mark_size = int(im_size[0]*0.08) else: mark_size = int(im_size[1]*0.08) mark_image.thumbnail((mark_size, mark_size)) print('水印图片尺寸:',mark_image.size) position = mark_size//3, mark_size//3 image.paste(mark_image, position, mark_image) name = os.path.basename(image_file) new_name = os.path.join('.output', name) image.save(new_name, quality=95)# 循环读入照片files = os.listdir('.input')for file in files: image_file = os.path.join('.input', file) print(image_file) add_watermark(image_file)
当然,网上有很多现成的软件,也能实现批量打水印。但我还是喜欢用Python,以后想要什么样的效果,改改参数就好了~
参考链接
- Win10 + Opencv3 for Python 的安装过程 https://www.jianshu.com/p/c3af3cadf372
- Py之cv2:cv2库的简介、安装、使用方法(常见函数、方法等)最强详细攻略 https://blog.csdn.net/qq_41185868/article/details/79675875#%E5%85%B3%E4%BA%8EOpenCV%E7%AE%80%E4%BB%8B
- python PIL 图像处理库简介(一) https://www.cnblogs.com/lyrichu/p/9124504.html
- python PIL的Image.resize()和Image.thumbnail()函数的区别 https://blog.csdn.net/TeFuirnever/article/details/90597048
python图片批量处理器_用python给图片批量打水印相关推荐
- python图片转文字_【收藏】图片转成文字的方法总结,python批量图片转文字信息参考源码...
在日常办公或者学习中,往往存在这样一个工作场景,比如,"老王,我这里有一张图片,你把里面的文字信息给我整理出来",都2021年了,你真的还在手敲图片文字信息么?那么还不赶紧收藏这篇 ...
- python批量添加水印_用Python批量添加水印,提高工作效率!
平常工作中,为保护原创,我们常常会给图片打水印,但是一般的工具存在水印只能添加在固定位置(比如左上.左下等),或者无法批量添加水印的问题.这些不灵活的应用会影响我们的工作效率. 今天,未明学院的老师就 ...
- python图片字符分割_图像分割python
常用的十大 python 图像处理工具 本文为 AI 研习社编译的技术博客,原标题 : 10 Python image manipulation tools. 作者 | Parul Pandey 翻译 ...
- excel图片变成代码_没错, Python杀死了Excel
在大家的印象里,想进入金融行业或者数据岗位,首先需要精通Excel.然而野村证券副首席数字官马修·汉普森在上周五的伦敦Quant Conference上发表讲话:"现在走进交易大厅,用Exc ...
- python语言编写一个生成九宫格图片的代码_用Python一键生成炫酷九宫格图片,火了朋友圈...
作为一个男同胞来说,为了给女朋友拍一张美美的照片,着实需要花费很大的时间和精力,不仅仅需要从众多的图片中精心挑选,而且还需要有着超强的图片精修能力,才能得到一张张达到女友要求的图片,真心不容易啊- 朋 ...
- python将图片存入数据库_使用python把图片存入数据库
一般情况下我们是把图片存储在文件系统中,而只在数据库中存储文件路径的,但是有时候也会有特殊的需求:把图片二进制存入数据库. 今天我们采用的是python+mysql的方式 MYSQL 是支持把图片存入 ...
- python图片保存需要在图片展示后_用python处理图片之打开\显示\保存图像的方法...
一提到数字图像处理,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1.不开源,价格贵 2.软件容量大.一般3G以上,高版本甚至达5G以上. 3.只能做研究,不易转化成软件. 因此, ...
- python 图片处理模块_(python)图片处理Pillow模块的使用
Pillow中最重要的类就是Image,该类存在于同名的模块中.可以通过以下几种方式实例化:从文件中读取图片,处理其他图片得到,或者直接创建一个图片. 还有一个类为ImageDraw,用来画图. 1. ...
- python改变图像颜色_通过python改变图片特定区域的颜色详解
首先让我祭出一张数学王子高斯的照片,这位印在德国马克上的神人有多牛呢? 他是近代数学的奠基人之一,与牛顿, 阿基米德并称顶级三大数学家,随便找一个编程语言的数学库,里面一定有和他名字相关的一堆函数. ...
最新文章
- 清华大学首批研究生学术与职业发展能力提升项目评估交流会举行
- c语言普通变量间接访问,C语言学习笔记-指针
- 初步估算轴直径2017-12-13
- Codeforces Beta Round #19 D. Points
- Redis 高可用篇:你管这叫 Sentinel 哨兵集群原理
- CentOS7.1 KVM虚拟化之经常使用管理虚拟机命令(3)
- Java学习——继承和多态
- mongodb,spring data api常用总结
- 《图解HTTP》阅读笔记--第六章--HTTP首部
- OpenSource.com 评出 2014 年十佳开源软件
- 解决swiper动态改变数据后分页混乱问题
- Android开源项目 陌客随机聊天
- HBU-NNDL 实验四 线性分类
- Window10系统安装V-rep教程
- 图表说话之解析excel商务饼图做法
- java程序是怎么执行的
- eclipse突然打不开,双击没反应
- Compound 治理——执行队列 TimeLock
- windows10 android模拟器,手机windows10模拟器安卓版
- 宁夏最新建筑施工电工(建筑特种作业)机考题库及建筑电工模拟试题
热门文章
- 23-java基础加强(反射、泛型、注解、动态代理)
- Python数据分析pandas之分组统计透视表
- lisp 批量文字求差值_Python 超简单 提取音乐高潮(附批量提取)
- java中将date插入mysql中date_JAVA 处理时间 - java.sql.Date、java.util.Date与数据库中的Date字段的转换方法[转]...
- php中函数声明的方法,PHP中的函数声明与使用
- Unix传奇(下篇)
- OpenCV形态学变换函数morphologyEx()顶帽运算的使用
- 小程序实现长按删除图片
- 揭秘ThreadLocal
- 阿里云Redis (安装包安装篇)