Pillow的使用-Image篇
安装Pillow
pip install pillow
构建图像
- Image.open(fp, mode =’r’ ):打开图片文件,返回一个
Image
对象- fp:图片路径
- mode:模式。如果给出,必须是
r
from PIL import Image
im = Image.open(path)
- Image.alpha_composite(im1, im2):在im1对象上的透明层复合im2,返回一个
Image
对象- im1:
Image
对象1 - im2:
Image
对象2
- im1:
from PIL import Image
im1 = Image.open(path1)
im2 = Image.open(path2)
im3 = Image.alpha_composite(im1,im2)
- Image.blend(im1, im2, alpha):在两个图片对象之间进行插值,返回一个
Image
对象- im1:
Image
对象1 - im2:
Image
对象2 - alpha:透明图
- im1:
如果alpha为0.0,则返回第一个图像的副本。如果alpha为1.0,则返回第二个图像的副本,基本的算法如下:
out = image1 * (1.0 - alpha ) + image2 * alpha
- Image.eval(image, *args):将函数应用于给定图像的中每一个像素。请注意,该函数对每个可能的像素值都进行一次评估,因此您不能使用随机组件或其他生成器。返回一个
Image
对象- image:
Image
对象 - args:一个函数对象和该函数的一个取整参数
- image:
from PIL import Imagedef func(a):return aim1 = Image.open(path1)
img = Image.eval(img1,func,1)
- Image.merge(mode, bands):将一组单波段图像合并成为一个多波段图像。返回一个
Image
对象- mode:用于输出图像的模式。支持的模式请看下方
Pillow支持的模式表
- bands:输出图像中每个波段包含一个单波段图像的序列
- mode:用于输出图像的模式。支持的模式请看下方
- Image.new(mode, size, color=0):根据模式、大小和颜色创建一个新的
Image
对象。烦会一个Image
对象- mode:用于新图像的模式。支持的模式请看下方
Pillow支持的模式表
- size: 大小,元组类型,包含宽度与高度
- color:用于新图像的颜色。传入一个整数的单波段模式,或传入一个元组的多波段模式,或者传入一个
ImageColor
对象
- mode:用于新图像的模式。支持的模式请看下方
from PIL import Image# 单个整数值
img = Image.new("RGBA",(1024,768),215)# 元组
img = Image.new("RGBA",(1024,768),(215,0,0)# ImageColor
from PIL import ImageColor
color = ImageColor.getrgb("#FF0000")
img = Image.new("RGBA",(1024,768),color)img.show()
从上面代码运行结果显示是一个红色,1024*768的图像
图像对象
alpha_composite(im, dest=(0,0), source=(0,0)):在
Image
对象中符合im
,效果与类方法alpha_composite
相似。无返回值- im:
Image
对象 - dest:指定此(目标)图像左上角的可选的长度为2的元组(左,上)
- source:盖源图像中左上角的长度为2的元组(左,上)或源矩形边界的长度为4的元组(左,上,右,下)
- im:
copy():复制此图片
from PIL import Imageimg = Image.new("RGBA",(1024,768),215)
img_copy = img.copy()
- crop(box=None):返回此图像的一个矩形区域,为一个
Image
对象- box:裁剪矩形,为一个长度为4的元组(左,上,右,下)
from PIL import Imageimg = Image.new("RGBA",(1024,768),215)
img_copy = img.crop(box=(0,0,500,500))
draft(mode, size):配置图像文件加载器,以便返回尽可能接近给定模式和大小的图像版本,无返回值
- mode:模式
- size:大小
filter(filter):使用给定的过滤器过滤此图像,返回一个
Image
对象- filter:过滤器
getbands():获取此图像中每个波段名称的元组。返回一个
tuple
from PIL import Imageimg = Image.new("RGBA",(1024,768),215)
print img.getbands() # ('R', 'G', 'B', 'A')
- getbbox():计算图像中非零区域的边界框,返回一个
tuple
from PIL import Imageimg = Image.new("RGBA",(1024,768),215)
print img.getbbox() # (0, 0, 1024, 768)
- getcolors(maxcolors=256):返回此图像中使用的颜色列表,返回一个计算与像素元组组成的元组列表
- maxcolors: 最大颜色数量,超过此值,当前方法将返回None
from PIL import Imageimg = Image.new("RGBA",(1024,768),215)
print img.getcolors() # [(786432, (215, 0, 0, 0))]
- getdata(band=None):以包含像素值的序列对象的形式返回此图像的内容。返回一个可迭代对象。
- band:波段,默认是获取所有。如果需要获取单波段,传入索引值(例如0从“RGB”图像中获得“R”波段)。
from PIL import Imageimg = Image.new("RGBA",(1024,768),215)for item in img.getdata():print item # 打印结果:
(215, 0, 0, 0)
(215, 0, 0, 0)
(215, 0, 0, 0)
...
- getextrema():获取每个波段的最小和最大像素值。对于单波段图像,返回一个长度为2的元组。对与多波段图像,每个波段包含一个2元组。
from PIL import Imageimg = Image.new("RGBA",(1024,768),215)
print img.getextrema() # ((215, 215), (0, 0), (0, 0), (0, 0))
- getpalette():返回图像的调色板,返回一个
list
对象。如果没有调色板,则返回None
from PIL import Imageimg = Image.new("RGBA",(1024,768),215)
print img.getpalette() # None
- getpixel(xy):返回给定位置的像素值,返回一个
tuple
- xy:位置,以(x,y)给出的坐标。
from PIL import Imageimg = Image.new("RGBA",(1024,768),215)
print img.getpixel((500,500)) # (215, 0, 0, 0)
- histogram(mask=None, extrema=None):返回图像的直方图。直方图以像素计数列表的形式返回,返回一个列表。
- mask:掩码
- extrema:极值
- paste(im, box=None, mask=None):将im图像粘贴到此图像上面。无返回值
- box:box可以是图像左上角的长度为2的元组(左,上)或长度为4的元组(左,上,右,下)
- mask:掩码
import os
from PIL import Imagepath1 = os.path.join(os.getcwd(),"23.png")
img1 = Image.open(path1)img = Image.new("RGBA",(1024,768),215)img1.paste(img)
img1.show()
- putdata(data, scale=1.0, offset=0.0):将像素数据复制到此图像上面。从图像左上角开始,直到图像或序列结束,无返回值。比例和偏移值用于调整序列值:pixel = value * scale + offset。
- data:一个图像数据序列
- scale:缩放比例值
- offset:偏移量值
from PIL import Imageimg = Image.new("RGBA",(1024,768),215)
img_c = Image.new("RGBA",(1024,768),-100)img.putdata(img_c.getdata())
img.show()
- putpalette(data, rawmode=’RGB’):附加一个调色板到这个图像。图像的模式必须是
P
或者L
。返回一个Image
对象- data:调色板序列
- rawmode:调色板的原始模式
from PIL import Imageimg = Image.new("P",(1024,768),215)
img_c = Image.new("P",(1024,768),-100)img_c.putpalette(img.getpalette())
img_c.show()
- quantize(colors=256, method=None, kmeans=0, palette=None):将图像转换为具有指定数量的颜色的
P
模式图像,返回一个Image
对象- colors:所需颜色的数量,<=256
- method:0:中值切割,1:最大覆盖率,2:快速八叉树,3:libimagequant
- kmeans:整数
- palette:量化给定的调色板
from PIL import Imageimg = Image.new("RGBA",(1024,768),215)img_q = img.quantize(colors=256,method=2)
print img_q # <PIL.Image.Image image mode=P size=1024x768 at 0x2BF7E80>
- resize(size, resample=0, box=None):返回此图像的调整大小后的副本。返回一个
Image
对象- size:以像素为单位的长度为2的元组(宽度,高度)
- resample:重采样滤波器。可以设置为:
Image.NEAREST
、Image.BOX
、Image.BILINEAR
、Image.HAMMING
、Image.BICUBIC
或者Image.LANCZOS
。如果省略,或者图像模式为1
或者P
,则设置Image.NEAREST
。 - box:一个浮点数组成的长度为4的元组,给出应该缩放的源图像的区域。值应该在(0,0,宽度,高度)的矩形内。
from PIL import Imageimg = Image.new("RGBA",(1024,768),215)
img_r = img.resize(size=(500,500))print img_r # <PIL.Image.Image image mode=RGBA size=500x500 at 0x37A6E80>
- rotate(angle, resample=0, expand=0, ceter=None, translate=None):旋转图像,并返回旋转后的图像副本。返回
Image
对象- angle:角度,逆时针旋转
- resample:重采样滤波器。可以是:
Image.NEAREST
、Image.BILINEAR
或者Image.BICUBIC
。如果省略,或者图像模式为1
或者P
,则设置Image.NEAREST
。 - expand:是否展开。如果为true,则展开输出图像以使其足够大以容纳整个旋转后的图像。如果为false或省略,使输出图像的大小与输入图像相同。
- center:旋转中心,长度为2的元组(宽度,高度),原点是左上角,默认是图像的中心
- translate:旋转后。一个长度为2的元组(宽度,高度)
import os
from PIL import Imagepath1 = os.path.join(os.getcwd(),"23.png")
img1 = Image.open(path1)img_r = img1.rotate(45,Image.BICUBIC)
img_r.show()
可以看到,图像已经逆时针旋转了45度
- save(fp, format=None, **params):保存图像到给定的文件名下。如果没有指定格式,则可以使用文件扩展名来确定要使用的格式。无返回值
- fp:文件名或路径
- format:可选的格式覆盖
import os
from PIL import Imagepath1 = os.path.join(os.getcwd(),"23.png")
img1 = Image.open(path1)img_r = img1.rotate(45,Image.BICUBIC)
img_r.save(os.path.join(os.getcwd(),"rotate.png"))
seek(frame):在这个序列文件中寻找给定的帧。如果您在序列结束之外寻找方法,则会 引发EOFError异常。当序列文件被打开时,库会自动寻找0帧。无返回值
- frame:帧号。从0开始
show(title=None, command=None):显示这个图像,此方法主要用于调试目的。无返回值
- title:在可能的情况下,用于图像窗口的可选标题。
- command:用于显示图像的命令
- split():将图像分割成单独的波段。该方法从图像中返回一个单独的图像的元组。例如,拆分“RGB”图像会创建三个新图像,每个图像都包含原始波段(红色,绿色,蓝色)之一的副本。返回一个
tuple
from PIL import Imagepath1 = os.path.join(os.getcwd(),"23.png")
img1 = Image.open(path1)data = img1.split()
print data # (<PIL.Image.Image image mode=L size=3500x3500 at 0x2DEC438>, <PIL.Image.Image image mode=L size=3500x3500 at 0x2DEC860>, <PIL.Image.Image image mode=L size=3500x3500 at 0x2DEC898>, <PIL.Image.Image image mode=L size=3500x3500 at 0x2DEC8D0>)
- getchannel(channel):返回包含源图像的单个通道的图像。返回L模式的图像,返回一个
Image
对象- channel:返回什么频道的图像。可以是索引(“RGBA”的”R”通道为0)或通道名称(“RGBA”的alpha通道为”A”)
from PIL import Imagepath1 = os.path.join(os.getcwd(),"23.png")
img1 = Image.open(path1)im = img1.getchannel(0)
或者:
im = img1.getchannel("R")
- tell():获取当前的帧号。返回
int
- thumbnail(size, resample=3):将此图像制作成缩略图。该方法修改图像以包含其本身的缩略图版本,不大于给定尺寸。无返回值
- size:大小
- resample:重采样滤波器。可以是:
Image.NEAREST
、Image.BILINEAR
、Image.BICUBIC
或者Image.LANCZOS
。如果省略,则默认为Image.BICUBIC
from PIL import Imagepath1 = os.path.join(os.getcwd(),"23.png")
img1 = Image.open(path1)img1.thumbnail(size=(500,500),resample=Image.BICUBIC)
print img1 # <PIL.PngImagePlugin.PngImageFile image mode=RGBA size=500x500 at 0x311C3C8>
- tobitmap(name=’image’):返回转换为X11位图的图像。此方法只使用于模式为
1
的图像,返回一个str
- name:用于位图变量的前缀名称
from PIL import Imageimg = Image.new("1",(1024,768),215)data = img.tobitmap(name='abc')
print data# 结果如下:
"""
#define abc_width 1024
#define abc_height 768
static char abc_bits[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
...
};
"""
- tobytes(encoder_name=’raw’, *args):以图像作为字节对象返回。为一个
str
对象 - transpose(method):旋转或翻转图像,返回旋转或翻转后的图像副本,一个
Image
对象- method:可以是:
Image.FLIP_LEFT_RIGHT
、Image.FLIP_TOP_BOTTOM
、Image.ROTATE_90
、Image.ROTATE_180
、Image.ROTATE_270
、Image.TRANSPOSE
或者Image.TRANSVERSE
- method:可以是:
from PIL import Imagepath1 = os.path.join(os.getcwd(),"23.png")
img1 = Image.open(path1)im = img1.transpose(Image.FLIP_LEFT_RIGHT)
im.show()
可以看出图像已经翻转了
- close():关闭文件指针
图像对象属性
- filename:源文件的文件名或路径。只有通过
open
方法构建的图像对象才具有此属性
import os
from PIL import Imagepath1 = os.path.join(os.getcwd(),"23.png")
img = Image.open(path1)print img.filename # 、/aaa/bbb/ccc/23.png
- format:源文件的图片格式。对于由库自身创建的图像,此属性值为
None
import os
from PIL import Imagepath1 = os.path.join(os.getcwd(),"23.png")
img = Image.open(path1)print img.format # PNGimg = Image.new("RGBA",(1024,768),215)
print img.format # None
- mode:图像模式。这是一个字符串,指定图像使用的像素格式。
from PIL import Imageimg = Image.new("RGBA",(1024,768),215)
print img.mode # RGBA
- size:图像大小,以像素为单位。大小以长度为2的元组(宽度,高度)给出。类型
tuple
from PIL import Imageimg = Image.new("RGBA",(1024,768),215)
print img.size # (1024, 768)
- width:图像宽度,以像素为单位。类型
int
from PIL import Imageimg = Image.new("RGBA",(1024,768),215)
print img.width # 1024
- height:图像高度,以像素为单位。类型
int
from PIL import Imageimg = Image.new("RGBA",(1024,768),215)
print img.height # 768
- palette:调色板表。如果模式为
P
,这应该是ImagePalette
类的一个实例。否则为None
from PIL import Imageimg = Image.new("RGBA",(1024,768),215)
print img.palette # Noneimg = Image.new("P",(1024,768),215)
print img.palette # <PIL.ImagePalette.ImagePalette object at 0x0000000002EF9828>
- info:保存与图像相关的数据的字典。这个字典被文件处理程序用来传递从文件读取的各种非图像信息。
import os
from PIL import Imagepath1 = os.path.join(os.getcwd(),"23.png")
img = Image.open(path1)
print img.info# 结果如下:
'''
{'chromaticity': (0.31269, 0.32899, 0.63999, 0.33001, 0.3, 0.6, 0.15, 0.05999),'icc_profile': 'xxxx/...','dpi': (300, 300)
}
'''img = Image.new("RGBA",(1024,768),215)
print img.info # {}
Pillow支持的模式表
模式 | 说明 |
---|---|
1 | 1位像素,黑白,每字节一个像素存储 |
L | 8位像素,黑白 |
P | 8位像素,使用调色板映射到任何其他模式 |
RGB | 3x8位像素,真彩色 |
RGBA | 4×8位像素,带透明度掩模的真彩色 |
CMYK | 4x8位像素,分色 |
YCbCr | 3x8位像素,彩色视频格式 |
LAB | 3×8位像素,L * a * b颜色空间 |
HSV | 3x8位像素,色调,饱和度,值颜色空间 |
I | 32位有符号整数像素 |
F | 32位浮点像素 |
更多关于Image的操作:http://pillow.readthedocs.io/en/latest/reference/Image.html
Pillow的使用-Image篇相关推荐
- python手记(四):pillow(五)最后一篇:图片过滤器,屏幕截屏。
人生不易且无趣,一起找点乐子吧.欢迎评论,和文章无关也可以. 这篇就当pillow的最后一篇好了,后面的模块没有前面的有趣,主要是一些细节上的处理,例如图片的文字啊,文字的类型啊. 无非就是告诉你很多 ...
- 第二篇 Python图片处理模块PIL(pillow)
本篇包含:16.Point 17.Putalpha 18.Putdata 19.Putpalette 20.Putpixel 21.Quantize 22.R ...
- python 图像处理模块pillow
PIL:python imageing library,是python的基本图像处理库,PIL功能强大,API简单易用.由于PIL只支持python2.7,因此一群志愿者在PIL的基础上创建了新的版本 ...
- numpy pytorch 接口对应_用树莓派4b构建深度学习应用(四)PyTorch篇
前言 上回我们安装了OpenCV 4.4,相信对源码编译库文件有了一定的了解,这篇我们进一步在树莓派上编译并安装 Pytorch 的最新版本. PyTorch 1.6 的新特性 PyTorch 1.6 ...
- 探索 YOLO v3 实现细节 - 第6篇 预测 (完结)
YOLO,即You Only Look Once的缩写,是一个基于卷积神经网络(CNN)的物体检测算法.而YOLO v3是YOLO的第3个版本,即YOLO.YOLO 9000.YOLO v3,检测效果 ...
- 详解Python第三方库(三)----- Pillow库
一.简介及安装Pillow 1.1 简介 PIL:Python Imaging Library,已经是Python平台上的图像处理标准库了.PIL功能非常强大,但API却非常简单易用,因此广受开发人员 ...
- 使用pil读取gif图有些位置为黑色_使用 Pillow 快速创建 GIF 动图
后台回复[入门资料] 送你十本Python电子书 之前有篇推文分享了如何在 Matplotlib 中生成 GIF 可视化图表,有一定的限制.本文将介绍如何用 Pillow 创建 GIF,可以将任意多张 ...
- python找色_python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
Python图片处理模块PIL(pillow) pywin32的主要作用 1.捕获窗口: 2.模拟鼠标键盘动作: 3.自动获取某路径下文件列表: 4.PIL截屏功能 找色点击功能思路: 抓取当前屏幕快 ...
- Python:实现图片裁剪的两种方式——Pillow和OpenCV
原文:https://blog.csdn.net/hfutdog/article/details/82351549 在这篇文章里我们聊一下Python实现图片裁剪的两种方式,一种利用了Pillow,还 ...
最新文章
- 计算机应届生必读的 AI 入门经典书单
- 用双注意力模块来做语义分割
- 美国空军把将人工智能纳入杀伤链列为最高优先事项之一
- onenote怎么同步到电脑_OneNote“此分区文件似乎已损坏”的解决办法
- 【学习笔记】SAP CO模块概念信息(上)
- Windows7 beta1 微软官方下载
- 洛谷 1226 取余运算||快速幂
- 30张不明觉厉的照片,看几遍终于看懂了
- 皖西学院计算机协会组织部,皖西学院
- 特斯拉退市,是一个工程师的执拗
- linux下mysql5.7环境
- 论文中baseline是什么意思?
- win2008服务器系统玩红警,win8系统玩不了红色警戒2如何解决?win8系统玩不了红色警戒2解决方法...
- oracle 复制表方法,Oracle 数据库之表的复制
- Windows10的电脑如何查找AppData文件夹
- ionic安装和创建项目
- 现代制造业信息化建设的主要内容
- Python笔记_第四篇_高阶编程_再议装饰器和再议内置函数
- android设备内部添加apn信息
- 小心肝队-冲刺日志(第一天)
热门文章
- Excel快捷的把列宽调整到合适的宽度
- chatgpt赋能python:Python波浪号简介
- 取消IE8打开HTTPS带图片内容后提示安全警告
- linux 网卡gso,linux内核网络协议栈学习笔记:关于GRO/GSO/LRO/TSO等patch的分析和测试...
- 考研计算机专业学校选择,关于学校的选择问题:计算机专业_跨考网
- SQL中一些实用的快捷键
- 视频播放不流畅怎么办?使用CDN加速一步搞定!
- nvm介绍、nvm下载、安装与使用
- 基于Java web的电动车销售平台 毕业设计-附源码201524
- 多元(二元)函数极限的存在性问题