Python让繁琐工作自动化——chapter17 操作图像
1. 基础语法
(1) 导入模块
from PIL import Image
(2)处理Image数据类型
catlmg = Image.open('zophie.png') #Image.open 函数返回一个Image数据对象
width, height = catImg.size #im.size 函数返回两个值,宽和高(size函数没有‘()’调用!)
im = Image.new('RGBA',(200,200),'white') #Image.new函数新建一个图像,参数含义(颜色模式,图像大小(元组表示),背景色)
faceim = catlmg2.crop((335,345,565,560)) #crop函数裁切图像并返回一个新的Image对象,矩形元组(左[,上[,右),下))
catlmg2 = catlmg.copy() #copy函数复制图像,返回一个新对象
catlmg2.paste(faceim,(left,top)) #paste函数将faceim 粘贴到 catImg2对象上,参数(‘源’Image对象,包含x和y的元组(指明主对象左上角)
im = im.resize((width,height)) #调整大小,在原Image对象上调用
afterimg.rotate(6,expand = True).save('rotateimg.jpg') #旋转对象返回一个新对象,(旋转角度,expand设置为True→调整整个尺寸以适应旋转后的新图像)
im.getpixel((x,y)) #获得单个像素的颜色值
im.putpixel((x,y),(R,G,B)) #对单个元素进行上色
(3)在图像上绘画
from PIL import Image,ImageDraw,ImageFont #ImageDraw模块为绘画模块,ImageFont模块为字体模块
im = Image.new('RGBA',(200,200),'white') #创建新的对象
draw = ImageDraw.Draw(im) #将Image对象传入ImageDraw对象
draw.line([(0,0),(199,0),(199,199),(0,199),(0,0)],fill='black',width = 1) #线(位置列表,填色,线宽)
draw.rectangle((20,30,60,60),fill='blue',outline=‘red’) #矩形(顶点元组,填色,轮廓颜色)
draw.ellipse((20,50,40,80),fill='red',outline=‘red’) #椭圆(包含该椭圆的矩形顶点,填色,轮廓颜色)
draw.polygon(((57,80),(50,48),(12,23),(120,90),(103,113)),fill='green') #多边形(顶点元组,填色,轮廓颜色)
draw.text((100,120),'Hello',fill='purple') #draw.text方法绘制文本(位置元组,文本内容,字体颜色)
arialFont = ImageFont.truetype('Arial.ttf',32) #ImageFont对象,用于设置文本的字体和大小
draw.text((100,150),'Howdy',fill='green',font=arialFont)
2. 实例应用
2.1 添加徽标
对目标文件夹中的所有照片添加水印,检查当前照片规格是否为规定大小,若是,将宽/高中较大的一个改为规定尺寸,另一个参数按比例缩小,将改变的图像 存入另一个文件夹。
# 2018/3/30 0030 20:14 #添加徽标,检查宽度和高度是否高于300,若是,将较大的一个猜到300 ,在按比例缩放,
from PIL import Image
import osLOGONAME = 'catlogo.png'
logo_file = Image.open(LOGONAME) #打开水印图片
logowidth,logoheight = logo_file.size #获得水印图片尺寸
FIT_SIZE = 300 #规定大小
os.makedirs('withlogo',exist_ok = True) #exist_ok = True检查是否该文件夹已经存在for file in os.listdir('.'): #遍历当前文件夹,不是图片的继续找下一个文件if not file.endswith('.png') or file.endswith('.jpg') or file ==LOGONAME:continueim = Image.open(file)width, height = im.sizeprint(width,height)if width > FIT_SIZE and height > FIT_SIZE: #判断当前图片是否符合要求,不符合则重新调整if width > height:height = int ((FIT_SIZE / width)*height)width = FIT_SIZEelse:width = int(( FIT_SIZE / height)*width)height = FIT_SIZEprint("Resizing ....%s"%file)im = im.resize((width,height))# print("The size of the pic is %s"%(im.size))print("Adding logo to %s.."%file)im.paste(logo_file,(width-logowidth, height-logoheight),logo_file) #将水印复制到目标照片,若没写第三个参数透明像素将变为白色im.save(os.path.join('withlogo',file))
3. 课后习题
3.1 识别照片文件夹
定义照片文件夹:假定超过半数文件是照片的任何文件夹,且照片尺寸大于一定规格
# 2018/4/3 0003 17:05
#查询指定文件夹是否为照片文件夹:照片数量大于非照片数量,且照片大于一定规格
from PIL import Image
import os
SIZE = 100 #规定长宽
photodir = []
for foldername , subfolder , filenames in os.walk('D:\\pycharm'):numphotofile = 0numnotphoto = 0for file in filenames:#print("Checking....%s"%file)if not str(file).endswith('.png') or str(file).endswith('.jpg'): #不是要求的jpg/png格式,继续找下一个numnotphoto +=1continuefolderpath = os.path.abspath(foldername) #文件的绝对路径filepath = os.path.join(folderpath,file) #将照片和文件路径结合→照片的绝对路径im = Image.open(filepath) #安全打开照片文件width , height = im.sizeif width >=SIZE and height >=SIZE:numphotofile += 1else:numnotphoto += 1if numnotphoto<numphotofile:#print("This is a photo folder ")photodir.append(foldername) #将该照片文件夹添加到列表#print(foldername)for i in photodir: #输出照片文件夹位置print(i)
3.2 定制的座位卡
将纯文本文件的客人名单创建定制的邀请函,为客人创建定制的座位卡图像
# 2018/4/3 0003 17:55
#定制的座位卡from PIL import Image,ImageDraw,ImageFont
import os
#将客人名字输出
os.makedirs('guset_seat',exist_ok=True)
guests = open('guests.txt','r')pic = Image.open('draw_pic.png')for guestname in guests.readlines():guestname = guestname.strip() #将每个名字脱去‘\n’ #创建图像288*360im = Image.new('RGBA',(288,360),'white')im.paste(pic,(0,0),pic)draw = ImageDraw.Draw(im)draw.line([(0,0),(287,0),(287,359),(0,359),(0,0)], fill='black')draw.text((144,220),guestname,fill='blue')filename = guestname+'.png' #客人名字命名文件im.save(os.path.join('guset_seat',filename))
注意:
(1)在对图像的尺寸传参时,以元组数据类型传入,(左,上,右,下)前两个为闭区间即包含当前位置,后两个为开区间即不包含当前位置。
(2)在打开照片时,常出现FileNotFound等错误,在这里的解决办法是,将该文件的绝对路径保存,打开时用这个绝对路径
Python让繁琐工作自动化——chapter17 操作图像相关推荐
- python—让繁琐工作自动化
python,在占领国一段时间的朋友圈,是关于编程的东西.大都是是扫码进入学习群之类的东西.只是不知道哪些当时刷圈的小伙伴们学的怎么样了,大致也有一两个月的时间. 为什么提起这个,因为最近也看到一些p ...
- python自动化办公入门书籍推荐-好书推荐 | Python 如此神奇,让繁琐工作自动化...
原标题:好书推荐 | Python 如此神奇,让繁琐工作自动化 Python 如此神奇,让繁琐工作自动化 编程的威力 如今,人们面临的大多数任务都可以通过编写计算机软件来完成. Al Sweigart ...
- python 复制文件并重命名_好书推荐 | Python 如此神奇,让繁琐工作自动化
优质文章,第一时间送达! Python 如此神奇,让繁琐工作自动化 编程的威力 如今,人们面临的大多数任务都可以通过编写计算机软件来完成. Al Sweigart 的室友曾经只花了几个小时,就写出了一 ...
- 《Python编程快速上手 让繁琐工作自动化》pdf
<div id="article_content" class="article_content tracking-ad" data-mod=" ...
- Python程序员的圣经——《Python编程快速上手:让繁琐工作自动化》尾末附下载地址
一.前言 如今,人们面临的大多数任务都可以通过编写计算机软件来完成.Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.通过Python编程,我们能够解决现实生活中的很多任务. 今天给 ...
- python经典书记必读:Python编程快速上手 让繁琐工作自动化
所属网站分类: 资源下载 > python电子书 作者:熊猫烧香 链接:http://www.pythonheidong.com/blog/article/69/ 来源:python黑洞网,专注 ...
- Python编程快速上手,让繁琐工作自动化(附下载)
今天给大家分享一份Python程序员的圣经--<Python编程快速上手:让繁琐工作自动化>.这是本面向实践的Python编程实用指南. 目录 第一章 Python基础 第二章 控制流 第 ...
- python快速上手 让繁琐工作自动化 英文版_入门python:《Python编程快速上手让繁琐工作自动化》中英文PDF+代码...
入门推荐学习<python编程快速上手>前6章是python的基础知识,通俗易懂地讲解基础,初学者容易犯错的地方,都会指出来.从第三章开始,每章都有一个实践项目,用来巩固前面所学的知识. ...
- python编程快速上手 让繁琐工作自动化 豆瓣_2019年,这些豆瓣评分9.0以上的8本程序员好书你都知道吗?...
豆瓣这些9.0以上的高评分程序员好书你都知道有哪些吗?小编去豆瓣看了一下,推荐这8本最适用的程序员好书给你. 1.UNIX环境高级编程(第3版)(豆瓣评分9.6)UNIX编程圣经 与Linux相结合的 ...
- python自动化办公入门书籍-Python如此神奇,让繁琐工作自动化 (文中含Python基础)...
原标题:Python如此神奇,让繁琐工作自动化 (文中含Python基础) "你在2个小时里完成的事,我们3个人要做两天."21世纪早期,我的大学室友在一个电子产品零售商店工作.商 ...
最新文章
- SpringCloud服务注册启动的时候报错(com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException)
- 360脱口秀:‘未来属于虚拟’开播啦!
- EmEdit选择多行内容
- IPv6:不仅仅是数字加减法那么简单
- ANSYS Motion 2020 R2中文版
- Fedora 31 正式版今天发布,Python不是传说的3.8,而是3.7.4
- centos php5.3 yum 安装 php53-mcrypt
- 计算机专业词典_好书优选:实用英汉汉英计算机词典
- Latex指南(part2)--Latex入门之组织文档结构
- 生成静态页面的五种方案 收藏
- Session操作对象的三种状态
- java垃圾回收机制介绍
- PDF转换成word转换器绿色版
- 浏览器错误信息无法解析服务器,win10系统使用搜狗浏览器提示无法解析服务器的dns地址的修复教程...
- javascript 实现英文首字母大写
- excel表格如何画斜线并写字
- linux文件编程 --- fflush函数
- 红米、小米 开发者选项
- 图像融合论文及代码网址整理总结(1)——多聚焦图像融合
- springboot二手车交易系统毕业设计源码131456
热门文章
- 172篇文献:NUS颜水成等发布首篇《深度长尾学习》综述
- yolov3聚类自己数据的anchor box
- Callback Promise Generator Async-Await 和异常处理的演进
- SQL语句处理一些修改、新增、删除、修改属性操作(MySql)
- YCrCb444转换成YCrCb422随笔
- win7 自带计算机(for programmer)
- 从0到1亿美元 ---- PopCap创始人John Vechey自述(zt)
- 每个字符旋转随机角度的图象验证码 V2.0
- 来了来了!github开源作业车间调度平台正式上线!
- 遗传算法解决TSP问题MATLAB实现(详细)