广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Pillow使用Image篇的使用
  • 640
分享到

Pillow使用Image篇的使用

2024-04-02 19:04:59 640人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录安装Pillow构建图像图像对象图像对象属性安装Pillow pip install pillow 构建图像 Image.open(fp, mode ='r' ):打开图片

安装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


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:透明图

如果alpha为0.0,则返回第一个图像的副本。如果alpha为1.0,则返回第二个图像的副本,基本的算法如下:


out  =  image1  *  (1.0  -  alpha ) +  image2  *  alpha

Image.eval(image, *args):将函数应用于给定图像的中每一个像素。请注意,该函数对每个可能的像素值都进行一次评估,因此您不能使用随机组件或其他生成器。返回一个Image对象

  • image:Image对象
  • args:一个函数对象和该函数的一个取整参数


from PIL import Image
def func(a):
    return a
im1 = Image.open(path1)
img = Image.eval(img1,func,1)

Image.merge(mode, bands):将一组单波段图像合并成为一个多波段图像。返回一个Image对象

  • mode:用于输出图像的模式。支持的模式请看下方Pillow支持的模式表
  • bands:输出图像中每个波段包含一个单波段图像的序列

Image.new(mode, size, color=0):根据模式、大小和颜色创建一个新的Image对象。烦会一个Image对象

  • mode:用于新图像的模式。支持的模式请看下方Pillow支持的模式表
  • size: 大小,元组类型,包含宽度与高度
  • color:用于新图像的颜色。传入一个整数的单波段模式,或传入一个元组的多波段模式,或者传入一个ImageColor对象

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的元组(左,上,右,下)
  • copy():复制此图片

from PIL import Image

img = Image.new("RGBA",(1024,768),215)
img_copy = img.copy()

crop(box=None):返回此图像的一个矩形区域,为一个Image对象

  • box:裁剪矩形,为一个长度为4的元组(左,上,右,下)

from PIL import Image
img = 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 Image

img = Image.new("RGBA",(1024,768),215)
print img.getbands()    # ('R', 'G', 'B', 'A')

getbbox():计算图像中非零区域的边界框,返回一个tuple


from PIL import Image

img = Image.new("RGBA",(1024,768),215)
print img.getbbox()     # (0, 0, 1024, 768)

getcolors(maxcolors=256):返回此图像中使用的颜色列表,返回一个计算与像素元组组成的元组列表

  • maxcolors: 最大颜色数量,超过此值,当前方法将返回None

from PIL import Image

img = Image.new("RGBA",(1024,768),215)
print img.getcolors()       # [(786432, (215, 0, 0, 0))]

getdata(band=None):以包含像素值的序列对象的形式返回此图像的内容。返回一个可迭代对象。

  • band:波段,默认是获取所有。如果需要获取单波段,传入索引值(例如0从“RGB”图像中获得“R”波段)。

from PIL import Image
img = 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 Image

img = Image.new("RGBA",(1024,768),215)
print img.getextrema()      # ((215, 215), (0, 0), (0, 0), (0, 0))

getpalette():返回图像的调色板,返回一个list对象。如果没有调色板,则返回None


from PIL import Image

img = Image.new("RGBA",(1024,768),215)
print img.getpalette()      # None

getpixel(xy):返回给定位置的像素值,返回一个tuple

  • xy:位置,以(x,y)给出的坐标。

from PIL import Image

img = 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 Image
path1 = 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 Image

img = 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 Image

img = 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 Image

img = 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 Image

img = 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 Image

path1 = 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 Image

path1 = 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 Image

path1 = 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 Image

path1 = 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 Image

path1 = 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 Image

img = 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

from PIL import Image

path1 = 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 Image

path1 = 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 Image

path1 = os.path.join(os.getcwd(),"23.png")
img = Image.open(path1)

print img.format        # PNG

img = Image.new("RGBA",(1024,768),215)
print img.format        # None

mode:图像模式。这是一个字符串,指定图像使用的像素格式。


from PIL import Image

img = Image.new("RGBA",(1024,768),215)
print img.mode        # RGBA

size:图像大小,以像素为单位。大小以长度为2的元组(宽度,高度)给出。类型tuple


from PIL import Image

img = Image.new("RGBA",(1024,768),215)
print img.size        # (1024, 768)

width:图像宽度,以像素为单位。类型int


from PIL import Image

img = Image.new("RGBA",(1024,768),215)
print img.width        # 1024

height:图像高度,以像素为单位。类型int


from PIL import Image

img = Image.new("RGBA",(1024,768),215)
print img.height        # 768

palette:调色板表。如果模式为P,这应该是ImagePalette类的一个实例。否则为None


from PIL import Image

img = Image.new("RGBA",(1024,768),215)
print img.palette       # None

img = Image.new("P",(1024,768),215)
print img.palette       # <PIL.ImagePalette.ImagePalette object at 0x0000000002EF9828>

info:保存与图像相关的数据的字典。这个字典被文件处理程序用来传递从文件读取的各种非图像信息。


import os
from PIL import Image

path1 = 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篇的使用的文章就介绍到这了,更多相关Pillow Image篇内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Pillow使用Image篇的使用

本文链接: https://www.lsjlt.com/news/158093.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Pillow使用Image篇的使用
    目录安装Pillow构建图像图像对象图像对象属性安装Pillow pip install pillow 构建图像 Image.open(fp, mode ='r' ):打开图片...
    99+
    2022-11-12
  • Python使用Pillow添加水印
    本文实例为大家分享了Python使用Pillow添加水印的具体代码,供大家参考,具体内容如下 python数据分析得到的图片,并对照片添加水印pillowPIL包含在pillow中,...
    99+
    2022-11-11
  • elementui下image组件的使用
    目录elementui-image组件的组成elementui-image组件的功能elementui-image的功能实现fit的样式实现图片懒加载的实现方式图片加载失败和加载中的...
    99+
    2022-11-13
  • 使用Python PIL库中的Image
         今天,是我来到博客园的第五天,发现自己还没有头像,想着上传ubuntu系统中我很喜欢的一个背景图片来当头像,但是因为图片过大,上传失败了。那么,我们如何使用python中强大的PIL库来进行图片裁剪呢?     from PI...
    99+
    2023-01-30
    库中 Python PIL
  • Python使用Pillow进行图像处理
    一、概述 PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却非常简单易用。 由于PIL仅支持到Pyt...
    99+
    2022-11-13
  • Pillow图像颜色处理的具体使用
    目录颜色命名getrgb()方法getcolor()示例——修改证件照背景色Pillow 提供了颜色处理模块 ImageColor,该模块支持不同格式的颜色,比如 RGB 格式的颜色...
    99+
    2022-11-12
  • border-image怎么在CSS3中使用
    这篇文章给大家介绍border-image怎么在CSS3中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。CSS Code复制内容到剪贴板border-width: 40px;   bo...
    99+
    2023-06-09
  • python中image函数怎么使用
    在Python中,可以使用PIL库(Python Imaging Library)的Image函数来处理图像。具体使用方法如下:首先...
    99+
    2023-09-14
    python
  • CSS的list-style-image属性怎么使用
    这篇文章主要介绍“CSS的list-style-image属性怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“CSS的list-style-image属性怎么使用”文章能帮助大家解决问题。CS...
    99+
    2023-07-04
  • Python使用Pillow实现图像基本变化
    目录一、图像处理1. 灰度图像2. 二值图像3. 索引图像4. RGB彩色图像5. 图像存储方式二、图像处理基础操作1.查看图片属性2. 显示RGB不同通道3.PGB和HSV的转换三...
    99+
    2022-11-11
  • 如何使用Spring Boot创建docker image
    这篇文章主要介绍“如何使用Spring Boot创建docker image”,在日常操作中,相信很多人在如何使用Spring Boot创建docker image问题上存在疑惑,小编查阅了各式资料,整理出...
    99+
    2022-10-19
  • 如何在C#中使用Image控件
    这篇文章给大家介绍如何在C#中使用Image控件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。首先是View层,比较简单:<Grid Grid.Row="1"> &n...
    99+
    2023-06-06
  • MyCat - 使用篇(3)
    全局序列号数据切分后,原有的关系数据库中的主键约束在分布式条件下将无法使用,因此需要引入外部机制保证数据唯一性标识,这种保证全局性的数据唯一标识的机制就是全局序列号(sequence)。 全局序列号有很多实现的方式,比如本地配置文件,或者拿...
    99+
    2023-01-31
    MyCat
  • 【python使用 Pillow 库】图片合成为 GIF 动画
    from PIL import Imageimage_files = ["big-300-frame/frame0.png", "big-300-frame/frame1.png", ...
    99+
    2023-08-30
    python pillow 开发语言
  • laravel 使用 Intervention/image 进行图片处理
    1.安装 使用Composer在命令行安装最新版本的Intervention Image: composer require intervention/image 2.集成到Laravel 安装好Intervention Image后,打开...
    99+
    2023-09-06
    laravel php
  • CSS中如何使用list-style-image属性
    这篇文章将为大家详细讲解有关CSS中如何使用list-style-image属性,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。CSS list-style-...
    99+
    2022-10-19
  • 使用GraalVM native-image 编译SpringBoot3全过程
    本文记录了使用native-image编译SpringBoot3.0.3的过程及遇到的问题。其中一些问题也是网上很多朋友遇到,我在实际操作的过程也遇到过同样的问题,在此做一记录。 目录 一、编译环境准备 1.1 安装GraalVM 1.2 ...
    99+
    2023-09-27
    java jvm 开发语言
  • uni-app - - - - - 小程序使用background-image无效?
    小程序使用background-image无效 1. 用image标签代替样式背景图2. 将图片转换为base64编码3. 直接在标签上写入4. 将路径改成可以直接访问的绝对路径 如题目所...
    99+
    2023-09-02
    uni-app 小程序
  • 在spring boot3中使用native image的最新方法
    目录简介安装GraalVM添加Native Image支持构建spring boot3应用总结简介 在之前spring boot3文章中我们介绍了,spring boot3的一个重要...
    99+
    2023-01-31
    spring boot3使用native image spring boot3 native image
  • 死磕MyCat使用篇之第一篇
    基本概念 直接介绍概念太枯燥了,还是拿个和背景篇相似的例子介绍业务场景:客户完成下单,快递员接受并更新运单状态,客户可以随时查看运单状态的任务。一票快递可能有多个子母件。同时,我们需要标记每个运单的状态,运...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作