VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • Python图像处理库:Pillow 初级教程(2)

必须指出的是除非必须,Pillow不会解码或raster数据。当你打开一个文件,Pillow通过文件头确定文件格式,大小,mode等数据,余下数据直到需要时才处理。

这意味着打开文件非常快,与文件大小和压缩格式无关。下面的程序用来快速确定图片属性:

确定图片属性

1
2
3
4
5
6
7
8
9
from __future__ import print_function
import sys
from PIL import Image
for infile in sys.argv[1:]:
    try:
        with Image.open(infile) as im:
            print(infile, im.format"%dx%d" % im.size, im.mode)
    except IOError:
        pass

裁剪、粘贴、与合并图片

Image类包含还多操作图片区域的方法。如crop()方法可以从图片中提取一个子矩形

从图片中复制子图像

1
2
3
box = im.copy() #直接复制图像
box = (100100400400)
region = im.crop(box)

区域由4-tuple决定,该tuple中信息为(left, upper, right, lower)。 Pillow左边系统的原点(0,0)为图片的左上角。坐标中的数字单位为像素点,所以上例中截取的图片大小为300*300像素^2。

处理子图,粘贴回原图

1
2
region = region.transpose(Image.ROTATE_180)
im.paste(region, box)

将子图paste回原图时,子图的region必须和给定box的region吻合。该region不能超过原图。而原图和region的mode不需要匹配,Pillow会自动处理。

另一个例子

1
2
3
4
5
6
7
8
9
10
11
12
Rolling an image
def roll(image, delta):
    "Roll an image sideways"
    image = image.copy() #复制图像
    xsize, ysize = image.size
    delta = delta % xsize
    if delta == 0return image
    part1 = image.crop((00, delta, ysize))
    part2 = image.crop((delta, 0, xsize, ysize))
    image.paste(part2, (00, xsize-delta, ysize))
    image.paste(part1, (xsize-delta, 0, xsize, ysize))
    return image

相关教程