python自动化之图像
'''
RGBA值:指定颜色中的红、绿、蓝和alpha(透明度)的值
RGBA 名称
(255,255,255,255) White
(0,128,0,255) Green
(128,128,128,255) Gray
(0,0,0,255) Black
(255,0,0,255) Red
(0,0,255,255) Blue
(255,255,0,255) Yellow
(128,0,128,255) Purple
'''
from PIL import ImageColor
ImageColor.getcolor('red','RGBA')
Out[104]: (255, 0, 0, 255)
ImageColor.getcolor('RED','RGBA')
Out[105]: (255, 0, 0, 255)
ImageColor.getcolor('Black','RGBA')
Out[106]: (0, 0, 0, 255)
ImageColor.getcolor('chocolate','RGBA')
Out[107]: (210, 105, 30, 255)
ImageColor.getcolor('CornflowerBlue','RGBA')
Out[108]: (100, 149, 237, 255)
'''
原点位于图像左上角的像素,用符号(0,0)指定:
x坐标,从原点开始,从左至右增加;
y坐标,从原点开始,从上至下增加;
矩阵元组参数:
左:该矩阵的最左边的x坐标
顶:该矩阵的顶边的y坐标
右:该矩阵的最右下边的x坐标
底:该矩阵的最右下边的y坐标
'''
#################用PIL模块操作图像#################
from PIL import Image
one=Image.open(r'C:\Users\Administrator\Desktop\卡\10056_卡表.jpg')
'''
可以调用Image.open(),传入文件名字符串,对Image对象的所有更改都可以保存到
图像文件中(也是任何格式).所有的旋转、调整大小、裁剪、绘画和其他图像操作
都通过这个Image对象上的方法调用来完成
'''
from PIL import Image
one=Image.open(r'C:\Users\Administrator\Desktop\卡\10056_卡表.jpg')
one.size
wid,hei=one.size
wid
hei
one.filename
one.format
one.format_description
one.save(r'C:\Users\Administrator\Desktop\one.jpg')
'''
Image.new()返回的对象表示空白的图像:
1、字符串'RGBA'
2、大小,两个整数元组,作为新图像的宽度和高度
3、背景颜色:支持传入标准颜色名称的字符串,ImageColor.getcolor()函数的返回值;默认黑色
'''
from PIL import Image
im=Image.new('RGBA',(100,200),'purple')
im.save(r'C:\Users\Administrator\Desktop\im.jpg')
im2=Image.new('RGBA',(20,20))
im2.save(r'C:\Users\Administrator\Desktop\im2.jpg')
##################裁剪图片
############crop函数带的参数为(起始点的横坐标,起始点的纵坐标,终点的横坐标,终点的纵坐标)##############
############crop函数:原始的Image对象原封不动,crop()方法返回一个新的Image对象#########
from PIL import Image
one=Image.open(r'C:\Users\Administrator\Desktop\one.jpg')
cropped=one.crop((200,400,300,500))
cropped.save(r'C:\Users\Administrator\Desktop\cropped.png')
#######################################复制和粘贴图像到其他图像#################################
'''
paste()方法有两个参数:
1、“源”Image对象
2、包含x和y坐标的元组,指明源Image对象粘贴到主Image对象时左上角的位置
'''
from PIL import Image
oneIm=Image.open(r'C:\Users\Administrator\Desktop\one.jpg')
oneCopyIm=oneIm.copy()
faceIm=oneIm.crop((335,345,565,560))
faceIm.size
oneCopyIm.paste(faceIm,(0,0))
oneCopyIm.paste(faceIm,(400,500))
oneCopyIm.save(r'C:\Users\Administrator\Desktop\test.jpg')
#######################################调整图像大小#################################
'''
resize()方法不会在原图上修改Image对象,而是返回一个新的Image对象
'''
from PIL import Image
oneIm=Image.open(r'C:\Users\Administrator\Desktop\one.jpg')
width,height=oneIm.size
quartersizedIm=oneIm.resize((int(width/2),int(height/2)))
quartersizedIm.save(r'C:\Users\Administrator\Desktop\testone.jpg')
svelteIm=oneIm.resize((width,height+300))
svelteIm.save(r'C:\Users\Administrator\Desktop\testtwo.jpg')
#######################################旋转和翻转图像#################################
'''
rotate()方法不会在原图上修改Image对象,而是返回一个新的Image对象
oneIm.rotate(90).save(r'C:\Users\Administrator\Desktop\rotated90.jpg')
oneIm.rotate(180).save(r'C:\Users\Administrator\Desktop\rotated180.jpg')
oneIm.rotate(90).save(r'C:\Users\Administrator\Desktop\rotated270.jpg')
当图像旋转90度或270度时,宽度和高度会变化.如果旋转其他角度,图像的原始尺寸会保持.
rotate()方法有一个可选的expand关键字参数,如果设置为True,就会放大图像的尺寸,
以适应整个旋转后的新图像
'''
oneIm.rotate(6).save(r'C:\Users\Administrator\Desktop\rotated6.jpg')
oneIm.rotate(6,expand=True).save(r'C:\Users\Administrator\Desktop\rotated6_expanded.jpg')
'''
利用transpose()方法,还可以得到图像的"镜像翻转"
必须向transpose()方法传入Image.FLIP_LEFT_RIGHT
或Image.FLIP_TOP_BOTTOM
'''
oneIm.transpose(Image.FLIP_LEFT_RIGHT).save(r'C:\Users\Administrator\Desktop\horizontal_flip.jpg')
oneIm.transpose(Image.FLIP_TOP_BOTTOM).save(r'C:\Users\Administrator\Desktop\vertical_flip.jpg')
#######################################更改单个像素#################################
'''
单个像素的颜色可以通过getpixel()和putpixel()方法设置和取得.
putpixel()方法还接受一个元组,作为该像素的颜色.这个颜色参数是四整数
RGBA元组或三整数RGB元组
'''
from PIL import ImageColor
im=Image.new('RGBA',(100,100))
im.getpixel((0,0))
for x in range(100):
for y in range(50):
im.putpixel((x,y),(210,210,210))
for x in range(100):
for y in range(50,100):
im.putpixel((x,y),ImageColor.getcolor('darkgray','RGBA'))
im.getpixel((0,0))
im.getpixel((0,50))
im.save(r'C:\Users\Administrator\Desktop\putPixel.png')
#######################################在图像上绘画#################################
#####得到一个可以绘制形状和文字的白色图像
from PIL import Image,ImageDraw
im=Image.new('RGBA',(200,200),'while')
draw=ImageDraw.Draw(im)
'''
绘制形状:
point(xy,fill):x,y表示画的点的列表,形式为[(x,y),(x,y)...],fill表示点的颜色,RGBA元组/颜色名称的字符串
line(xy,fill,width):x,y表示绘制的线的一个连接点,形式为[(x,y),(x,y)...],fill表示线的颜色,RGBA元组/颜色名称的字符串,width表示线的宽度
rectangle(xy,fill,outline):x,y参数表示一个矩形元组,形式为[left,top,right,bottom],fill表示颜色,RGBA元组/颜色名称的字符串,outline为可选,矩阵轮廓的颜色
ellipse(xy,fill,outline):x,y参数表示刚好包含该椭圆的矩形,形式为[left,top,right,bottom],fill表示颜色,RGBA元组/颜色名称的字符串,outline为可选,椭圆轮廓的颜色
polygon(xy,fill,outline):x,y参数是一个元组列表,表示多边形边的连接点,形式为[(x,y),(x,y)...],fill表示颜色,RGBA元组/颜色名称的字符串,outline为为可选,多边形轮廓的颜色
http://pillow.readthedocs.org/en/latest/reference/ImageDraw.html
'''
from PIL import Image,ImageDraw
im=Image.new('RGBA',(200,200),'white')
draw=ImageDraw.Draw(im)
draw.rectangle((20,30,60,60),fill='blue')
draw.ellipse((120,30,160,60),fill='red')
draw.polygon(((57,87),(79,62),(94,85),(120,90),(103,113)),fill='brown')
draw.line([(0,0),(100,0),(100,100),(0,100),(0,0)],fill='black')
for i in range(100,200,10):
draw.line([(i,0),(200,i-100)],fill='green')
im.save(r'C:\Users\Administrator\Desktop\drawing.jpg')
#######################################在图像上绘制文本#################################
'''
绘制文本:
text():xy,text,fill,font
xy两个整数的元组,指定文本区域的左上角
text参数想写入的文本字符串
fill可选,文本的颜色
font可选,是一个ImageFont对象,用于设置文本的字体和大小
其中,很难预知一块文本在给定的字体下的大小,textsize()方法,第一参数为测量文本字符串
第二参数为可选的ImageFont对象,返回文本宽度和高度
ImageFont模块,ImageFont.truetype()函数,有两个参数,第一个是字符串,表示字体的TrueType文件,
是硬盘上实际的字体文件,TrueType字体文件具有.TTF文件扩展名;第二个是整数,表示字体大小的
点数(而不是像素).Pillow创建的PNG图像默认是每英寸72像素,一点是1/72英寸
'''
from PIL import Image,ImageDraw,ImageFont
import os
im=Image.new('RGBA',(200,200),'white')
draw=ImageDraw.Draw(im)
draw.text((20,150),'Hello',fill='purple')
fontsFolder='FONT_FOLDER'
arialFont=ImageFont.truetype(os.path.join(fontsFolder,'arial.ttf'),32)
draw.text((100,150),'Howdy',fill='gray',font=arialFont)
im.save(r'C:\Users\Administrator\Desktop\text.png')
'''
小结:
crop()、copy()、paste()、resize()、rotate()、transpose()、save()
'''
python自动化之图像的更多相关文章
- 探索微软开源Python自动化神器Playwright
相信玩过爬虫的朋友都知道selenium,一个自动化测试的神器工具.写个Python自动化脚本解放双手基本上是常规的操作了,爬虫爬不了的,就用自动化测试凑一凑. 虽然selenium有完备的文档,但也 ...
- 【玩具】使用Python自动化发送微信消息进行订水
事情是这样的,我知道淘宝上有卖一种USB接口的大按钮,估计是给工厂或者医院之类的场景设计的,样子长这样: 然后我就一直挺想搞一个的,不为别的,就是玩,但是想来想去也没想到这玩意儿对我而言能有啥用途,就 ...
- flow.ci + Github + Slack 一步步搭建 Python 自动化持续集成
理想的程序员必须懒惰,永远追随自动化法则.Automating shapes smarter future. 在一个 Python 项目的开发过程中可能会做的事情:编译.手动或自动化测试.部署环境配置 ...
- Selenium2+python自动化23-富文本(自动发帖)
前言 富文本编辑框是做web自动化最常见的场景,有很多小伙伴遇到了不知道无从下手,本篇以博客园的编辑器为例,解决如何定位富文本,输入文本内容 一.加载配置 1.打开博客园写随笔,首先需要登录,这里为了 ...
- Selenium2+python自动化24-js处理富文本(带iframe)
前言 上一篇Selenium2+python自动化23-富文本(自动发帖)解决了富文本上iframe问题,其实没什么特别之处,主要是iframe的切换,本篇讲解通过js的方法处理富文本上iframe的 ...
- Selenium2+python自动化7-xpath定位
前言 在上一篇简单的介绍了用工具查看目标元素的xpath地址,工具查看比较死板,不够灵活,有时候直接复制粘贴会定位不到.这个时候就需要自己手动的去写xpath了,这一篇详细讲解xpath的一些语法. ...
- Selenium2+python自动化13-Alert
不是所有的弹出框都叫alert,在使用alert方法前,先要识别出它到底是不是alert.先认清楚alert长什么样子,下次碰到了,就可以用对应方法解决.alert\confirm\prompt弹出框 ...
- 【python自动化第十一篇】
[python自动化第十一篇:] 课程简介 gevent协程 select/poll/epoll/异步IO/事件驱动 RabbitMQ队列 上节课回顾 进程: 进程的诞生时为了处理多任务,资源的隔离, ...
- Day1 老男孩python自动化运维课程学习笔记
2017年1月7日老男孩python自动化运维课程正式开课 第一天学习内容: 上午 1.python语言的基本介绍 python语言是一门解释型的语言,与1989年的圣诞节期间,吉多·范罗苏姆为了在阿 ...
随机推荐
- 网络设备重的loopback接口
回环接口在我们做试验的过程有典型的应用,几乎可以离不开它,一个虚拟的接口,给我带来了很大的方便,有了回环接口,你可以不用为你的PC,来添加第二块物理网卡,就可以完成VM,服务器搭建,群集,VPN等试验 ...
- Maven 依赖节点总结
首先是log4j: <!--哎,神特么的log4j,版本不对就Spring AOP前置增强 new不出来--><dependency> <groupId>log4j ...
- WCF 学习笔记一
wcf服务的细节: 1.新建项目的时候有wcf服务应用程序和wcf服务库,两者区别在于前者可以寄宿在IIS上,而后者只能给其他项目使用,可以寄宿在控制台程序.窗体程序等等. 相关定义的链接 http: ...
- [硬件配置]记录Ubuntu 14.04 下安装无线网卡驱动解决无法连接WiFi的过程
新电脑安装了Ubuntu 14.04,但是网络连接中只有以太网而没有WiFi的选项. 打开System Setting系统设置-Software&Updates软件&更新-Additi ...
- 深入理解C/C++二维数组
深入理解C/C++二维数组 前言 本来以为自己对二维数组的理解还可以,没感觉有什么,但是今天小伙伴问了一个问题感觉迷惑了好久,于是决定细致的记录一下,一步一步的探究各种关于二维数组的问题,巩固基础. ...
- Java 集合基础知识 List/Set/Map
一.List Set 区别 List 有序,可重复: Set 无序,不重复: 二.List Set 实现类间区别及原理 Arraylist 底层实现使用Object[],数组查询效率高 扩容机制 ...
- [笔试]CVTE 2019提前批 Windows应用开发笔试
不定项选择(x20) 数据结构 以abcdefg的顺序入栈,不可能出现的出栈顺序 一棵二叉树给出中序遍历和后序遍历结果,求左子树的节点数 操作系统 Linux中用什么指令可以找到文件中所有以" ...
- 【Py大法系列--01】20多行代码生成你的微信聊天机器人
前言 近期Stack Overflow公布了一项调查显示,Python已经成了发展最快的主流编程语言,Python搭乘着数据科学和机器学习以及人工智能的浪潮,席卷了整个技术圈.越来越多的人想了解.想学 ...
- Eclipse各版本分析比较
Eclipse最初是由IBM公司开发的替代商业软件Visual Age for Java的下一代IDE开发环境,2001年11月贡献给开源社区,现在它由非营利软件供应商联盟Eclipse基金会. Ec ...
- unload没有用
今天下午测试了unload这个事件包括beforeunload <script type="text/javascript"> window.addEventListe ...