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 操作图像相关推荐

  1. python—让繁琐工作自动化

    python,在占领国一段时间的朋友圈,是关于编程的东西.大都是是扫码进入学习群之类的东西.只是不知道哪些当时刷圈的小伙伴们学的怎么样了,大致也有一两个月的时间. 为什么提起这个,因为最近也看到一些p ...

  2. python自动化办公入门书籍推荐-好书推荐 | Python 如此神奇,让繁琐工作自动化...

    原标题:好书推荐 | Python 如此神奇,让繁琐工作自动化 Python 如此神奇,让繁琐工作自动化 编程的威力 如今,人们面临的大多数任务都可以通过编写计算机软件来完成. Al Sweigart ...

  3. python 复制文件并重命名_好书推荐 | Python 如此神奇,让繁琐工作自动化

    优质文章,第一时间送达! Python 如此神奇,让繁琐工作自动化 编程的威力 如今,人们面临的大多数任务都可以通过编写计算机软件来完成. Al Sweigart 的室友曾经只花了几个小时,就写出了一 ...

  4. 《Python编程快速上手 让繁琐工作自动化》pdf

    <div id="article_content" class="article_content tracking-ad" data-mod=" ...

  5. Python程序员的圣经——《Python编程快速上手:让繁琐工作自动化》尾末附下载地址

    一.前言 如今,人们面临的大多数任务都可以通过编写计算机软件来完成.Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.通过Python编程,我们能够解决现实生活中的很多任务. 今天给 ...

  6. python经典书记必读:Python编程快速上手 让繁琐工作自动化

    所属网站分类: 资源下载 > python电子书 作者:熊猫烧香 链接:http://www.pythonheidong.com/blog/article/69/ 来源:python黑洞网,专注 ...

  7. Python编程快速上手,让繁琐工作自动化(附下载)

    今天给大家分享一份Python程序员的圣经--<Python编程快速上手:让繁琐工作自动化>.这是本面向实践的Python编程实用指南. 目录 第一章 Python基础 第二章 控制流 第 ...

  8. python快速上手 让繁琐工作自动化 英文版_入门python:《Python编程快速上手让繁琐工作自动化》中英文PDF+代码...

    入门推荐学习<python编程快速上手>前6章是python的基础知识,通俗易懂地讲解基础,初学者容易犯错的地方,都会指出来.从第三章开始,每章都有一个实践项目,用来巩固前面所学的知识. ...

  9. python编程快速上手 让繁琐工作自动化 豆瓣_2019年,这些豆瓣评分9.0以上的8本程序员好书你都知道吗?...

    豆瓣这些9.0以上的高评分程序员好书你都知道有哪些吗?小编去豆瓣看了一下,推荐这8本最适用的程序员好书给你. 1.UNIX环境高级编程(第3版)(豆瓣评分9.6)UNIX编程圣经 与Linux相结合的 ...

  10. python自动化办公入门书籍-Python如此神奇,让繁琐工作自动化 (文中含Python基础)...

    原标题:Python如此神奇,让繁琐工作自动化 (文中含Python基础) "你在2个小时里完成的事,我们3个人要做两天."21世纪早期,我的大学室友在一个电子产品零售商店工作.商 ...

最新文章

  1. SpringCloud服务注册启动的时候报错(com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException)
  2. 360脱口秀:‘未来属于虚拟’开播啦!
  3. EmEdit选择多行内容
  4. IPv6:不仅仅是数字加减法那么简单
  5. ANSYS Motion 2020 R2中文版
  6. Fedora 31 正式版今天发布,Python不是传说的3.8,而是3.7.4
  7. centos php5.3 yum 安装 php53-mcrypt
  8. 计算机专业词典_好书优选:实用英汉汉英计算机词典
  9. Latex指南(part2)--Latex入门之组织文档结构
  10. 生成静态页面的五种方案 收藏
  11. Session操作对象的三种状态
  12. java垃圾回收机制介绍
  13. PDF转换成word转换器绿色版
  14. 浏览器错误信息无法解析服务器,win10系统使用搜狗浏览器提示无法解析服务器的dns地址的修复教程...
  15. javascript 实现英文首字母大写
  16. excel表格如何画斜线并写字
  17. linux文件编程 --- fflush函数
  18. 红米、小米 开发者选项
  19. 图像融合论文及代码网址整理总结(1)——多聚焦图像融合
  20. springboot二手车交易系统毕业设计源码131456

热门文章

  1. 172篇文献:NUS颜水成等发布首篇《深度长尾学习》综述
  2. yolov3聚类自己数据的anchor box
  3. Callback Promise Generator Async-Await 和异常处理的演进
  4. SQL语句处理一些修改、新增、删除、修改属性操作(MySql)
  5. YCrCb444转换成YCrCb422随笔
  6. win7 自带计算机(for programmer)
  7. 从0到1亿美元 ---- PopCap创始人John Vechey自述(zt)
  8. 每个字符旋转随机角度的图象验证码 V2.0
  9. 来了来了!github开源作业车间调度平台正式上线!
  10. 遗传算法解决TSP问题MATLAB实现(详细)