PIL 中的 Image 模块

2024-05-30 03:58
文章标签 模块 pil image

本文主要是介绍PIL 中的 Image 模块,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文是节选自 PIL handbook online 并做了一些简单的翻译

只能保证自己看懂,不保证翻译质量。欢迎各位给出意见。

------------------------------------------------------

    Image 模块提供了一个同名类(Image),也提供了一些工厂函数,包括从文件中载入图片和创建新图片。例如,以下的脚本先载入一幅图片,将它旋转 45 度角,并显示出来:

   
1 >>>from PIL import Image 2  >>>im = Image.open("j.jpg") 3  >>>im.rotate(45).show()

    下面这个脚本则创建了当前目录下所有以 .jpg 结尾的图片的缩略图。

复制代码
    
1 from PIL import Image 2  import glob, os 3 4 size = 128, 128 5  for infile in glob.glob("*.jpg"): 6 file, ext = os.path.splitext(infile) 7 im = Image.open(infile) 8 im.thumbnail(size, Image.ANTIALIAS) 9 im.save(file + ".thumbnail", "JPEG")
复制代码

    Image 类中的函数

0.    new : 这个函数创建一幅给定模式(mode)和尺寸(size)的图片。如果省略 color 参数,则创建的图片被黑色填充满,如果 color 参数是 None 值,则图片还没初始化。

    
1 Image.new( mode, size ) => image 2 Image.new( mode, size, color ) => image

1.    open : 打开并识别所提供的图像文件。不过,使用这函数的时候,真正的图像数据在你进行数据处理之前并没有被读取出来。可使用 load 函数进行强制加载。 mode 参数可以省略,但它只能是 "r" 值。

    
1 Image.open( infile ) => image 2 Image.open( infile, mode ) => image

2.    blend : 使用两幅给出的图片和一个常量 alpha 创建新的图片。两幅图片必须是同样的 size 和 mode 。

    
1 Image.blend( image1, image2, alpha ) => image 2  # 结果 与 运算过程 3 # out = image1 * ( 1.0 - alpha ) + image2 * alpha

3.    composite : 使用两幅给出的图片和一个与 alpha 参数相似用法的 mask 参数,其值可为:"1", "L", "RGBA" 。两幅图片的 size 必须相同。

    
1 Image.composite( image1, image2, mask ) => image

4.    eval : 使用带一个参数的函数作用于给定图片的每一个像素。如果给定的图片有超过一个的 频段(band),则该函数也会作用于每一个频段。注意,该函数是每一个像素计算一次,所以不能使用一些随机组件或其他的生成器。

    
1 Image.eval( image, function ) => image

5.    frombuffer : (PIL 1.1.4 中新添加的)使用标准 "raw" 解码器在像素数据或是对象缓存中创建一个图像副本。不是所有的模式都支持这种用法。支持的 mode 有"L", "RGBX", "RGBA", "CMYK"。

    
Image.frombuffer( mode, size, data ) => image

6.    fromstring : 注意,这个函数只对像素数据进行解码,而不是一整张图片。如果你有一整张字符串格式的图片,使用 StringIO 对其进行包装并用 open 函数载入它。

    
1 # 使用字符串类型的像素数据和标准解码器 "raw" 来创建图像 2  Image.fromstring( mode, size, data ) => image 3 4  # 同上。不过允许你使用其他 PIL 支持的像素解码器。 5  Image.fromstring( mode, size, data, decoder, parameters ) => image

7.    merge : 使用一系列单一频段(band)的图像来创建新的一幅图像。频段是以一些图像组成的元组或列表,所有的 band 必须有相同大小的 size 。

    
1 Image.merge( mode, bands ) =>image

    Image 类中的方法

0.    convert : 返回一个转换后的图像的副本。

复制代码
    
1 # If mode is omitted, a mode is chosed so that all information in the image and the palette can be representedwithout a palette . 2 # when from a colour image to black and white, the library uses the ITU-R 601-2 luma transfrom: 3 # L = R * 299/1000 + G * 587/1000 + B * 114/1000 4  im.convert( mode ) => image 5 6  # Converts an "RGB" image to "L" or "RGB" using a conversion matrix. The matrix is 4- or 16-tuple. 7  im.convert( mode, matrix ) => image
复制代码

    下面是一个例子:转换 RGB 为 XYZ 。

    
1 rgb2xyz = ( 2 0.412453, 0.357580, 0.180423, 0, 3 0.212671, 0.715160, 0.072169, 0, 4 0.019334, 0.119193, 0.950227, 0 ) 5 out = im.convert("RGB", rgb2xyz)

1.    copy : 复制图像。如果你希望粘贴一些东西进图像里面的话可以使用这个方法,但仍然会保留原图像。

    
1 im.copy() => image

2.    crop : 返回图像某个给定区域。box 是一个 4 元素元组,定义了 left, upper, right, lower 像素坐标。使用这个方法的时候,如果改变原始图像,可能会,也可能不会改变裁剪生成的图像。创建一个完全的复制,裁剪复制的时候使用 load 方法。

    
1 im.crop( box ) => image

3.    draft : 按给出的 mode 和 size 进行配置。可以使用这个方法将彩色JPEG图片转为灰度图。

    
1 im.draft(mode, size)

4.    filter : 返回图像使用滤波器后的副本。可以看 这里 获取更多有用的滤波器。

    
1 im.filter( filter ) => image

5.    fromstring : 和前面的函数是一样的功能,不过这个方法是将数据载入到当前图像。

    
1 im.fromstring( data ) 2 im.fromstring( data, decoder, parameters )
6.    getbands : 返回一个元组,包含每一个 band 的名字,比如,在一幅 RGB 格式的图像上使用 getbands 则返回("R", "G", "B")。
    
1 im.getbands( ) => tuple of strings

7.    getbbox : 计算图像边框值,返回一个 4-元组 ,值为(左,上,右,下)。

    
1 im.getbbox() => 4-tuple or None

8.    getcolors : 在 1.1.5 版本中新添加的。返回一个未排序列表,其元素是元组(count, color)。the count is the number of times the corresponding color occurs in the image 。If the maxcolors value is exceeded, the method stops counting and returns None。

    
1 im.getcolors() => a list of (count, color) tuples or None 2 im.getcolors( maxcolors ) => a list of (count, color) tuples or None

9.    getdata : 返回一个图像内容的像素值序列。不过,这个返回值是 PIL 内部的数据类型,只支持确切的序列操作符,包括迭代器和基本序列方法。我们可以通过 list(im.getdata())  为其生成普通的序列。

    
1 im.getdata() => sequence

10.    getextrema : 返回一个 2-元组 ,值为图像的最小最大值。在当前PIL版本中,仅支持单一频段(single-band)的图像。

    
1 im.getextrema() => 2-tuple

11.    getpixel : 返回指定位置的像素,如果所打开的图像是多层次的图片,那这个方法就返回一个元组。

    
1 im.getpixel( xy ) => value or tuple

12.    histogram : 返回图像直方图,值为像素计数组成的列表。如果有参数 mask ,则返回图像所有部分的直方图。

    
1 im.histogram() => list 2 3 im.histogram( mask ) => list

13.    load : 版本 1.1.6 新添加的。load 返回对象的像素值,可以用来修改像素值。

    
1 im.load() 2 3  # 4  pix = im.load() 5  print pix[x, y] 6 pix[x, y] = value

14.    paste : 1). 粘贴新图片至图片中,box 参数可以为 2-元组(upper, left)或是 4-元组(left, upper, right, lower),或者是 None(0, 0)。2). 功能同上。不过是将指定位置填充为某种颜色。

复制代码
    
1 im.paste( image, box ) 2 3 im.paste( colour, box ) 4 5 im.paste( image, box, mask ) 6 7 im.paste( colour, box, mask )
复制代码

15.    point : 

    
1 im.point( bable ) => image 2 im.point( function ) => image

  ------------

未完待续。

这篇关于PIL 中的 Image 模块的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1015516

相关文章

Python利用PIL进行图片压缩

《Python利用PIL进行图片压缩》有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所以本文为大家介绍了Python中图片压缩的方法,需要的可以参考下... 有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所有可以对文件中的图

Python利用自带模块实现屏幕像素高效操作

《Python利用自带模块实现屏幕像素高效操作》这篇文章主要为大家详细介绍了Python如何利用自带模块实现屏幕像素高效操作,文中的示例代码讲解详,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、获取屏幕放缩比例2、获取屏幕指定坐标处像素颜色3、一个简单的使用案例4、总结1、获取屏幕放缩比例from

nginx-rtmp-module模块实现视频点播的示例代码

《nginx-rtmp-module模块实现视频点播的示例代码》本文主要介绍了nginx-rtmp-module模块实现视频点播,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录预置条件Nginx点播基本配置点播远程文件指定多个播放位置参考预置条件配置点播服务器 192.

多模块的springboot项目发布指定模块的脚本方式

《多模块的springboot项目发布指定模块的脚本方式》该文章主要介绍了如何在多模块的SpringBoot项目中发布指定模块的脚本,作者原先的脚本会清理并编译所有模块,导致发布时间过长,通过简化脚本... 目录多模块的springboot项目发布指定模块的脚本1、不计成本地全部发布2、指定模块发布总结多模

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

Python模块导入的几种方法实现

《Python模块导入的几种方法实现》本文主要介绍了Python模块导入的几种方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录一、什么是模块?二、模块导入的基本方法1. 使用import整个模块2.使用from ... i

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于