PIL学习—Image Module[未完成]

题目:Image 模块

Image模块提供了一个同名的类,用来表示PIL图像。该模块还提供了许多工厂函数,包括从文件加载图像和创建新图像的功能。

例子

下面的脚本加载一个图像,将其旋转45度,然后使用外部查看器显示它(通常在Unix上是xv,在Windows上是paint程序)

from PIL import Image
im = Image.open("bride.jpg")
im.rotate(45).show(

创建一个缩略图

from PIL import Image
import glob, os

size = 128, 128

for infile in glob.glob("*.jpg"):
    file, ext = os.path.splitext(infile)
    im = Image.open(infile)
    im.thumbnail(size)
    im.save(file + ".thumbnail", "JPEG")

缩略图函数:
im.thumbnail(size)

构造函数

PIL.Image.new(mode, size, color=0):根据给定参数创建一个图片
参数:

  • mode:使用的模式。
  • size:一个二维元组,包含宽和高。
  • colar:图像应该使用什么颜色。默认是黑色的。如果给定,这应该是一个单带模式的整数或浮点值,以及一个多带模式的元组(每个带一个值)。在创建RGB图像时,还可以使用ImageColor模块支持的颜色字符串。如果颜色为None,则不初始化图像。

**PIL.Image.fromarray(obj, mode=None)?*从导出数组接口的对象(使用缓冲区协议)创建图像内存。
如果obj不是连续的,则调用tobytes方法并使用frombuffer()。

  • obj 对象的数组接口
  • mode 模式

*PIL.Image.frombytes(mode, size, data, decoder_name=‘raw’, args):
从缓冲区中的像素数据创建图像内存的副本。
在其最简单的形式中,这个函数接受三个参数(模式、大小和未打包的像素数据)。
你也可以使用PIL支持的任何像素解码器。有关可用解码器的更多信息,请参见编写自己的文件解码器一节。
注意,这个函数只解码像素数据,而不是整个图像。如果字符串中有一个完整的图像,请将其包装在BytesIO对象中,并使用open()加载它。

  • mode – 模式。
  • size – 大小。
  • data – 一个字节缓冲区给定了对于该模式的原始数据。
  • decoder_name – 使用什么解码器。
  • args – 给解码器用的参数。

其他:
PIL.Image.fromstring(*args, **kw)
PIL.Image.frombuffer(mode, size, data, decoder_name=‘raw’, *args)

Modes(模式,Image创建中用到的)

  • 1 (1位,黑白)
  • L (8位,黑白)
  • P (8位像素,使用调色板映射到任何其他模式))
  • RGB (3x8彩色, 真彩色)
  • RGBA (4x8位, 真彩色+透明度)
  • CMYK (4x8位,颜色分隔)
  • YCbCr (3x8-位, 视频颜色格式)
  • LAB (3x8位, Lab 颜色空间)
  • HSV (3x8位, 色调,饱和度,值颜色空间)
  • I (32位符号整数)
  • F (32位浮点数)

PIL也为一些特殊的模式提供有限的支持,包括LA (L with alpha), RGBX (true color with padding)和RGBa (true color with premultiply alpha)。但是PIL不支持用户自定义模式;如果要处理上面没有列出的波段组合,请使用图像对象序列。

**您可以通过mode属性读取图像的模式。**这是一个包含上述值之一的字符串。

常用函数

PIL.Image.open(fp, mode=‘r’)
这是一个惰性操作;这个函数标识文件,但是文件仍然是打开的,在尝试处理数据(或调用load()方法)之前,不会从文件中读取实际的图像数据。
参数:

  • fp 一个文件名(字符串),路径库。路径对象或文件对象。file对象必须实现read()、seek()和tell()方法,并以二进制模式打开。
  • mode 必须给出r。
    **返回值:**一个Image对象
    抛出: IOError——如果找不到文件,或者无法打开和标识图像。

注意:为了防止由“解压炸弹”(即恶意文件,这些文件被解压成大量数据,并被设计成崩溃或使用大量内存造成破坏)引起的潜在DOS攻击,Pillow会在图像超过一定限度时发出解压炸弹警告。如果需要,警告可以转换为带有警告的错误。简单过滤器(“错误”,image . decompressionbomb警告)或完全抑制与警告。simplefilter(“忽略”,Image.DecompressionBombWarning)。还请参阅日志文档,以便将警告输出到日志工具而不是stderr。

Image.resize(size, resample=0)
返回此图像的调整大小的副本。
参数:

  • size(width,height)
  • resample 一个可选的重采样过滤器。
    返回值: Image对象。

其中:
PIL.Image.NEAREST:最低质量
PIL.Image.BILINEAR:双线性
PIL.Image.BICUBIC:三次样条插值
PIL.Image.ANTIALIAS:最高质量

Image.putpixel(xy, value)
修改给定位置的像素。对于单波段图像,颜色是一个数值,对于多波段图像,颜色是一个元组。
注意,这个方法相对比较慢。要进行更广泛的更改,可以使用paste()或ImageDraw模块。

  • xy: 坐标
  • value :要修改的值。

图像处理

有关图像合并/融合:

  • PIL.Image.alpha_composite(im1, im2)
  • PIL.Image.blend(im1, im2, alpha)
  • PIL.Image.composite(image1, image2, mask)
  • PIL.Image.eval(image, *args)
  • PIL.Image.merge(mode, bands)

补充:关于glob——Unix风格的路径名模式expansio

glob模块根据Unix shell使用的规则查找与指定模式匹配的所有路径名,虽然返回的结果顺序是任意的。不做波浪线扩展,但是*、?和用[]表示的字符范围将正确匹配。这是通过同时使用os.listdir()和fnmatch.fnmatch()函数来实现的,而不是通过实际调用子shell来实现的。注意,与fnmatch.fnmatch()不同,glob将以点(.)开头的文件名视为特殊情况。(对于tilde和shell变量展开,使用os.path.expanduser()和os.path.expandvars()。)

对于文字匹配,将元字符括在括号中。例如,“[?]“匹配字符”?

glob.glob(pathname)返回匹配的路径名。路径名可以是绝对的(如/usr/src/ python -1.5/ makefile),也可以是相对的(如…/…/Tools//.gif),并且可以包含shell样式的通配符。断开的符号链接包含在结果中(与shell中一样)。

glob.iglob:返回一个迭代器,该迭代器生成与glob()相同的值,而不需要同时存储它们。
假设只包含1.gif, 2.txt, and card.gif。

>>> import glob
>>> glob.glob('./[0-9].*')
['./1.gif', './2.txt']
>>> glob.glob('*.gif')
['1.gif', 'card.gif']
>>> glob.glob('?.gif')
['1.gif']

如果目录包含.开头的文件。默认情况下不会匹配它们。例如,考虑一个包含card.gif和.card.gif的目录:

>>> import glob
>>> glob.glob('*.gif')
['card.gif']
>>> glob.glob('.c*')
['.card.gif']

补充os.paht——常见的路径名操作

这个模块在路径名上实现了一些有用的函数。要读取或写入文件,请参阅open(),要访问文件系统,请参阅os模块。路径参数可以作为字符串或字节传递。鼓励应用程序将文件名表示为(Unicode)字符串。不幸的是,有些文件名在Unix上可能无法表示为字符串,因此需要支持Unix上任意文件名的应用程序应该使用字节对象来表示路径名。反之,使用字节对象不能表示Windows上的所有文件名(在标准的mbcs编码中),因此Windows应用程序应该使用字符串对象来访问所有文件。

与unix shell不同,Python不执行任何自动路径扩展。当应用程序需要类shell路径展开时,可以显式地调用expanduser()和expandvars()等函数。(参见glob模块)。

注意:所有这些函数都只接受字节或字符串对象作为参数。如果返回路径或文件名,则结果是相同类型的对象。

由于不同的操作系统具有不同的路径名称约定,因此标准库中有几个版本的此模块。os.path模块始终是适合运行Python的操作系统的路径模块,因此可以用于本地路径。不过,如果希望操作始终以不同格式之一显示的路径,还可以导入和使用各个模块。它们都有相同的界面:
用于unix样式路径的posixpath
ntpath用于Windows路径
macpath用于老式MacOS路径

函数
os.path.abspath(path)
返回路径名路径的规范化绝对版本。在大多数平台上,这相当于按如下方式调用函数normpath(): normpath(join(os.getcwd(), path))。

os.path.basename(path)
返回路径名路径的基本名称。这是通过将路径传递给函数split()返回的对的第二个元素。注意,这个函数的结果与Unix basename程序不同;当’/foo/bar/'的basename返回’bar’时,basename()函数返回一个空字符串(")。

os.path.commonpath(paths)
返回序列路径中每个路径名的最长公共子路径。如果路径同时包含绝对和相对路径名,或者路径为空,则引发ValueError。与commonprefix()不同,它返回一个有效的路径。

os.path.commonprefix(list):返回最长路径前缀(逐个字符获取),它是列表中所有路径的前缀。如果列表为空,返回空字符串(")

注意:此函数可能返回无效路径,因为它一次处理一个字符。要获得有效路径,请参见
如:
commonpath()。

>>> os.path.commonprefix(['/usr/lib', '/usr/local/lib'])
'/usr/l'

>>> os.path.commonpath(['/usr/lib', '/usr/local/lib'])
'/usr'

os.path.dirname(path):返回目录名。

os.path.exists(path):该地址是否存在文件。对符号链接文件返回False。

**os.path.lexists(path)?*如果path引用现有路径,则返回True。对于断开的符号链接返回True。在缺少os.lstat()的平台上等效exists()。

os.path.expanduser(path)???‘

os.path.expandvars(path) 返回展开环境变量的参数。表单 n a m e 或 name或 name{name}的子字符串被环境变量name的值替换。格式不正确的变量名和对不存在变量的引用保持不变。
在Windows上,除了 n a m e 和 name和 name{name}之外,还支持%name%扩展。

**os.path.getatime(path)**返回路径最后一次访问的时间。返回值是一个浮点数,给出从历元开始的秒数(参见时间模块)。如果文件不存在或无法访问,则引发OSError。

**os.path.getmtime(path):**返回路径上次修改的时间。返回值是一个浮点数,给出从历元开始的秒数(参见时间模块)。如果文件不存在或无法访问,则引发OSError。

**os.path.getctime(path):**返回系统的ctime,在某些系统(如Unix)上,ctime是最后一次元数据更改的时间,在其他系统(如Windows)上,ctime是path的创建时间。返回值是一个数字,给出从历元开始的秒数(参见时间模块)。如果文件不存在或无法访问,则引发OSError。

**os.path.getsize(path):**返回路径文件大小。

os.path.isabs(path)
如果path是绝对路径名,则返回True。在Unix上,这意味着它以斜杠开头;在Windows上,它以反斜杠开头,在截断一个可能的驱动器字母之后。

os.path.isfile(path)
如果path是一个现有的常规文件,则返回True。这遵循符号链接,因此islink()和isfile()对于同一路径都可以为真。

os.path.isdir(path)
如果path是现有目录,则返回True。这遵循符号链接,因此islink()和isdir()对于同一路径都可以为真。

os.path.islink(path)
如果path引用的是一个符号链接,则返回True。如果Python运行时不支持符号链接,则始终为False。

**os.path.ismount(path)**链接多个path成员。

os.path.normcase(path)
将路径名的大小写规范化。在Unix和Mac OS X上,这将返回未更改的路径;在不区分大小写的文件系统上,它将路径转换为小写。在Windows上,它还将前斜杠转换为后斜杠。如果路径类型不是str或字节(直接或间接通过操作系统),则引发类型错误。PathLike接口)。

os.path.normpath(path)
通过折叠冗余分隔符和上层引用来规范化路径名,以便a //B、a /B/、a /。/ B和A / foo / . ./B都变成了A/B。此字符串操作可能会更改包含符号链接的路径的含义。在Windows上,它将前斜杠转换为后斜杠。若要规范化大小写,请使用normcase()。

os.path.realpath(path)
返回指定文件名的规范路径,消除路径中遇到的任何符号链接(如果操作系统支持这些符号链接)。

os.path.relpath(path, start=os.curdir)
从当前目录或可选的开始目录返回到路径的相对文件路径。这是一个路径计算:没有访问文件系统来确认路径或启动的存在性或本质。start defaults to os.curdir.

os.path.samefile(path1, path2)
如果两个路径名参数都指向同一个文件或目录,则返回True。这是由设备号和i-node号决定的,如果对任一路径名的os.stat()调用失败,就会引发异常。

os.path.sameopenfile(fp1, fp2)
如果文件描述符fp1和fp2指向同一个文件,则返回True。

os.path.samestat(stat1, stat2)
如果stat元组stat1和stat2引用同一个文件,则返回True。这些结构可能由os.fstat()、os.lstat()或os.stat()返回。此函数实现samefile()和sameopenfile()使用的底层比较。

os.path.split(path)
将路径名路径分割成一对(head, tail), tail是最后一个路径名组件,head是指向该组件的所有内容。尾部永远不会包含斜线;如果路径以斜线结束,则tail为空。如果路径中没有斜杠,则磁头为空。如果路径是空的,那么头和尾都是空的。尾斜杠从头部移除,除非它是根(只有一个或多个斜杠)。在所有情况下,join(head, tail)都返回与path相同位置的路径(但是字符串可能不同)。还请参见函数dirname()和basename()。

os.path.splitdrive(path)
将路径名路径拆分为一对(驱动器、tail),其中驱动器要么是挂载点,要么是空字符串。在不使用驱动器规范的系统上,驱动器总是空字符串。在所有情况下,drive + tail将与path相同。

在Windows上,将路径名拆分为驱动器/UNC sharepoint和相对路径。
如果路径包含一个驱动器字母,驱动器将包含到冒号之前的所有内容。例如:splitdrive(“c:/dir”)返回(“c:”, “/dir”)
如果路径包含UNC路径,驱动器将包含主机名和共享,直到但不包括第四个分隔符。例如:splitdrive("//host/computer/dir")返回("//host/computer", “/dir”)

os.path.splitext(path)
将路径名路径拆分为一对(root, ext),这样root + ext == path和ext为空,或者以句点开头,最多包含一个句点。基本名上的前导周期被忽略;splitext (。cshrc文件中)返回(“。cshrc’,”)。

os.path.supports_unicode_filenames
如果任意Unicode字符串可以用作文件名(在文件系统施加的限制范围内),则为真。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值