pil显示图片_Python之PIL模块使用
PIL/Pillow 是 Python强大的图像处理库,功能包括:基本图像操作(创建缩略图、几何变换、图像裁剪、图像分离与合并、粘贴图片)图像存储、图像显示、格式转换、截屏操作、图像绘制功能、图像滤镜功能以及其他常用方法等!
介绍PIL、Pillow
PIL(Python Imaging Library)是Python图像处理库,PIL模块于2009年9月发布,最新版本是1.1.7,仅支持Python1.5.2 - 2.7
目前PIL项目已经停止开发,最后一次更新是在2011年
强调一下:PIL不支持Python3.x
而Pillow也是Python的图像处理库,与PIL区别:Pillow是PIL特定版本Fork代码,Pillow兼容PIL绝大多数用法,开发活跃,更主要是Pillow库支持Python3.x,所以推荐使用Pillow
现在说的PIL,一般都指Pillow,包括文章下面说的PIL,都是Pillow模块
本节使用演示图片:
PIL操作图片
- 图片大小:1680x1050
- 图片格式:JPEG
- 图片颜色模式:RGB
Image类
Image是PIL最重要的类,PIL大部分功能都是从Image类实例开始的
Image实例有5个属性:
- format : 返回图像格式(PNG,JPG,…),如果图像不是从文件读取的,则值None
- mode : 返回图像的模式,常用模式有:
- L (luminance) 灰度图像,8位像素,表示黑和白
- RGB 3x8位像素,为真彩色图像
- RGBA 4x8位像素,有透明通道的真彩色
- CMYK 4x8位像素,颜色分离,出版图像
- P 8位像素,使用调色板映射到其他模式
- 1 1位像素,表示黑和白,但是存储的时候每个像素存储为8bit
- YCbCr:3x8位像素,彩色视频格式
- I 32位整型像素
- F 32位浮点型像素
- PIL支持一些特殊的模式,包括RGBX(有padding的真彩色)和RGBa(有自左乘alpha的真彩色)
- size : 是一个二元tuple,包含width和height(宽度和高度,单位是px)
- palette : 仅当 mode 为 P 时有效,返回 ImagePalette 实例
- info : info信息,返回/设置图像一些额外信息,一个字典结构对象
示例代码
# -*- coding:utf-8 -*-from PIL import Imageif __name__ == '__main__': # 打开图片 im = Image.open('xiana.jpg') # 得到图片大小 print(im.size) # 图片格式 print(im.format) # 图片色彩模式 print(im.mode) # 返回 ImagePalette 实例 print(im.palette) # 实例信息(dict) print(im.info) # 打开,并查看图片 im.show()
说一下最后一个方法show() 查看图片,原理是将图片暂存为一个临时文件,然后调用操作系统默认图片浏览软件打开图片文件
Pillow库不会直接解码或者加载全部图像数据当用Image.open打开一个图片文件,只会读取文件头信息来确定格式、颜色模式、大小等,文件其他数据不会处理,这种方式保证了图片操作性能可以说Image.open是一个懒操作(只读文件头信息,直到图像操作才会读取整个图像数据),因此调用load()方法可以强行加载图像数据额外说一下“通道”概念每张图片都是由一个或多个数据通道构成,例如RGB图像是由三个数据通道构成,分别为R、G和B通道获得图片通道数及通道名称:Image.getbands()
图像操作
创建缩略图
Image.thumbnail()方法可以制作缩略图,接受一个二元数组作为缩略图的尺寸,然后将实例图片缩小到指定尺寸
生成JPG缩略图,示例如下:
# -*- coding:utf-8 -*-from PIL import Imageif __name__ == '__main__': # 打开图片 im = Image.open('xiana.jpg') print(im.size) x, y = im.size # 缩略图大小 im.thumbnail((x//2, y//2)) print(im.size) # 打开,查看图片 im.show()
裁剪图片
Image.crop() 能从图像中提取一个子矩形选区
Pillow库以图像左上角为坐标原点 (0,0),矩形选区区域由一个元组决定,元组信息包括 (左,上,右,下) 的坐标
裁剪图片示例:
# -*- coding:utf-8 -*-from PIL import Imageif __name__ == '__main__': # 打开图片 im = Image.open('test.png') # (左,上,右,下) selected = (610,140,1100,820) # 得到400x680px图片 region = im.crop(selected) region.show()
裁剪得到图片:
PIL裁剪图片
几何变换
- Image.resize() 设置图像大小
- Image.rotate() 旋转图像,按照给定角度顺时钟沿图像中心旋转图像
- Image.transpose(method) 翻转、旋转图像,method取值:
- FLIP_LEFT_RIGHT 左右颠倒
- FLIP_TOP_BOTTOM 上下颠倒
- ROTATE_90 旋转90°
- ROTATE_180 旋转180°
- ROTATE_270 旋转270°
示例代码:
# -*- coding:utf-8 -*-from PIL import Imageif __name__ == '__main__': im = Image.open('cj_xiana.jpg') out = im.resize((2180, 1300)) # 顺时针选择45度 out = im.rotate(45) # 旋转图像 # 左右颠倒 out = im.transpose(Image.FLIP_LEFT_RIGHT) # 上下颠倒 out = im.transpose(Image.FLIP_TOP_BOTTOM) out.show() # 旋转90° out = im.transpose(Image.ROTATE_90) # 旋转180° out = im.transpose(Image.ROTATE_180) # 旋转270° out = im.transpose(Image.ROTATE_270)
图像格式转换
PIL支持不同图像格式转换,使用 Image.open() 从磁盘中读取图片文件,它会根据图像信息自动确定图像格式
可使用save(filename, format) 将图片指定格式保存本地,若不指定图像格式,save()会根据文件扩展名指定图像格式
将图片转换为png格式示例
# -*- coding:utf-8 -*-from PIL import Imageif __name__ == '__main__': # 打开图片 im = Image.open('xiana.jpg') # 保存指定格式 im.save("xiana.png") # 打开,并查看图片 Image.open('xiana.png').show()
图像模式转换
使用convert()方法,进行图像模式转换
这个库支持 “L” 模式和 “RGB” 模式的互相转换. 要想转换到其它的模式, 可能需要使用一个中介模式, 比如 “RGB”.
# -*- coding:utf-8 -*-from PIL import Imageif __name__ == '__main__': im = Image.open('xiana.jpg') print(im.mode) # 彩色变黑白 im = im.convert("L") im.show()
将“RGB”模式的xiana.jpg图像转换为“L”模式的图像,图像效果:
PIL模式转换
粘贴图片
Image.paste(image, box) 将一个Image实例粘贴到另一个Image实例上
- box 一个元组 定义了左,上,右和下像素坐标,如果给定box值,被粘贴的图像的尺寸必须与区域尺寸一致
- 如果图像模式不匹配,被粘贴的图像将被转换为当前图像模式
# -*- coding:utf-8 -*-from PIL import Imageif __name__ == '__main__': im = Image.open('cj_xiana.jpg') w, h = im.size right_im = im.crop((w//2,0,w, h)) left_im = im.crop((0,0,w//2, h)) im.paste(left_im, (w//2,0,w, h)) im.paste(right_im, (0,0,w//2, h)) im.show()
把一个图片一份两半,右半部分粘贴到左边,左半部分粘贴到右边,最后效果:
PIL粘贴图片
Image.paste(colour, box) 可以把颜色填充到box对应的区域,对于单通道图像,变量colour为单个颜色值;对于多通道,则为一个元组
# -*- coding:utf-8 -*-from PIL import Imageif __name__ == '__main__': im = Image.open('cj_xiana.jpg') w, h = im.size im.paste((1, 149, 200), (w//4,h//4,w*3//4, h*3//4)) im.show()
效果:
PIL区域填充
分离和合并颜色通道
对于多通道图像,有时候能够分别对每个数据通道进行处理,处理完成重新整合
- Image.split()将图像各通道进行分离,每个通道即是一个图像
- Image.merge()将多个单通道图像合并,创建新图像
# -*- coding:utf-8 -*-from PIL import Imageif __name__ == '__main__': im = Image.open('cj_xiana.jpg') r,g,b = im.split() # 单通道图像展示 b.show() # 大量通道次序,合并 im1 = Image.merge("RGB
pil显示图片_Python之PIL模块使用相关推荐
- python 拼接图片_python使用PIL剪切和拼接图片
本文实例为大家分享了python使用PIL剪切图片和拼接图片的具体代码,供大家参考,具体内容如下 因工作需要,接触到了PIL这个包,看其他人的博客踩了一些坑,有些博客并没有注明各个位置参数的含义,今天 ...
- python显示图片_python图像显示
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 使用python进行数字图片处理,还得安装pillow包. 虽然python里面 ...
- python gui按顺序显示图片_python tkinter GUI绘制,以及点击更新显示图片代码
tkinter 绘制GUI简单明了,制作一些简单的GUI足够,目前遇到的一个问题是不能同时排列显示多幅图片(目前没找到同时显示解决方法), 退而求其次,改成增加一个update按钮,每次点下按钮自动更 ...
- python将矩阵转化为图片_Python利用PIL将数值矩阵转化为图像
要求:输入一个n*n的矩阵,矩阵包括从-1到1的浮点数,将其转化为可视化图像 调库 from PIL import Image import numpy as np import math 载入图像, ...
- python label显示图片_python 实现在tkinter中动态显示label图片的方法
在编程中我们往往会希望能够实现这样的操作:点击Button,选择了图片,然后在窗口中的Label处显示选到的图片.那么这时候就需要如下代码: from tkinter import * from tk ...
- 怎么看python环境变量配置是否好了验证图片_python 的 tesserocr 模块安装与获取图片验证码...
OCR,即Optical Character Recognition,光学字符识别,是指通过扫描字符,然后通过其形状将其翻译成电子文本的过程.对于图形验证码来说,它们都是一些不规则的字符,这些字符确实 ...
- pythontkinter显示图片_python – 使用Tkinter显示图像
我正在研究一个使用Tkinter和ImageTk显示一系列图像的python程序.我无法显示多个图像.下面是一个重现错误的小型完整程序.程序直接递归搜索当前的jpg文件,并在用户按Enter键时显示它 ...
- python kivy显示图片_python基于Kivy写一个图形桌面时钟程序代码示例
本篇文章小编给大家分享一下python基于Kivy写一个图形桌面时钟程序代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. Kivy 是一个开源的 ...
- python显示图片_python 一个figure上显示多个图像的实例
方法一:主要是inshow()函数的使用 首先基本的画图流程为: import matplotlib.pyplot as plt #创建新的figure fig = plt.figure() #必须通 ...
最新文章
- 2017.4.24 js 中的iscroll
- Keras创建者深度思考:不要将AI作为操纵用户的工具
- SP2-0110: Cannot create save file afiedt.buf
- 优酷开放SDK之setOnCompletionListener
- 《大数据》第1期“聚焦”——从系统角度审视大数据计算
- OPPO首部5G手机亮相 10倍混合光学变焦技术惊艳MWC
- 圆章能随便刻吗_当归、人参、虫草熬成的养生汤,能随便销售吗?
- Viod Class 启动
- SpringMVC的URL路径映射@RequestMapping
- android 一个界面显示多个窗口,Android Studio多个项目窗口怎么切换?
- Unigam标注和Ngram标注
- 11月3日 迅雷白金会员vip账号分享 91freevip 23:00更新
- 91.(leaflet篇)leaflet态势标绘-进攻方向绘制
- 李忠汇编语言-初学-第九章详解
- java共享充电宝管理系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
- 数据分析-数据指标描述业务之--咸鱼APP
- 触漫机器人_触漫携手壹心理打破亲子僵局 让爱驻家守护亲子健康
- 还想贪小便宜?建议你先了解一下物联卡收费标准!
- 欧美剧集观看最佳索引 US SHOWS GUIDE 【2005-12-27 转verycd】
- FFmpeg源码分析:swr_convert()音频格式转换
热门文章
- 上传大文件:在 System.Web.HttpRequest.GetEntireRawContent()
- springboot项目根据不同的环境启动不同的配置,如开发环境dev,测试环境sit,生产环境application...
- .Net开源源码查询
- 20140120收藏夹
- 页面用ajax实现简单的连接数据库
- linux的日志系统,Linux上的日志系统
- 新生周赛:小青的宿舍(C语言)
- android 会话 java_java – Android会话管理
- 信息奥赛一本通(1231:最小新整数)
- 信息学奥赛一本通(1143:最长最短单词)