Python编程快速上手 — 让繁琐工作自动化<三>

在不断填坑中前进。。

Posted by 三十一 on October 31, 2017

Python编程快速上手 — 让繁琐工作自动化<三>

Pillow 是一个第三方 Python 模块,用于 处理图像文件。该模块包含一些函数,可以很容易地裁剪图像、调整图像大小, 以及编辑图像的内容。

获取颜色值

from PIL import ImageColor
ImageColor.getcolor('red', 'RGBA')

用 Pillow 操作图像

加载一张图片到 Python 环境中

zophie

from PIL import Image
catIm = Image.open('zophie.png')

catIm.size 获取图片尺寸 width, height = catIm.size

catIm.filename 图片在本地的名称 catIm.formatcatIm.format_description 是获取图片格式的字符串 'PNG' 'Portable network graphics' format_description 比较详细。

im = Image.new("RGBA",(100,200),"purple") 创建一个尺寸为 100*200、背景色为 purple 的图片。

im2 = Image.new('RGBA', (20, 20)) 创建一个尺寸为 20*20、背景透明 的图片。

裁剪图片

croppedIm = catIm.crop((335, 345, 565, 560))
croppedIm.save('cropped.png')

cropped

Image 对 象的 crop()方法接受一个矩形元组,返回一个 Image 对象,表示裁剪后的图像。裁剪 不是在原图上发生的,也就是说,原始的 Image 对象原封不动,crop()方法返回一 个新的 Image 对象。

//读取本地图片建立一个 Image对象
catIm = Image.open('zophie.png')
//拷贝一份
catCopyIm = catIm.copy()
//剪裁出一份
faceIm = catIm.crop((335, 345, 565, 560))
//把剪裁出来的图片粘贴到拷贝出来的图片上位置为00
catCopyIm.paste(faceIm, (0, 0))
//保存图片
catCopyIm.save('pasted.png')

pasted

平铺图片


 catImWidth, catImHeight = catIm.size
 faceImWidth, faceImHeight = faceIm.size
 catCopyTwo = catIm.copy()
//平铺
//0, catImWidth 范围内faceImWidth为步长
 for left in range(0, catImWidth, faceImWidth):
    for top in range(0, catImHeight, faceImHeight):
        print(left, top)
        catCopyTwo.paste(faceIm, (left, top))
        
 catCopyTwo.save('tiled.png')

tiled

调整图片大小

resize()方法在 Image 对象上调用,返回指定宽度和高度的一个新 Image 对象

width, height = catIm.size
quartersizedIm = catIm.resize((int(width / 2), int(height / 2)))
quartersizedIm.save('quartersized.png')
svelteIm = catIm.resize((width, height + 300))
svelteIm.save('svelte.png')

quartersized

旋转图片

图像可以用 rotate()方法旋转,该方法返回旋转后的新 Image 对象,并保持原始 Image 对象不变。

catIm.rotate(90).save('rotated90.png')

rotated90

注意,当图像旋转 90 度或 270 度时,宽度和高度会变化。如果旋转其他角度, 图像的原始尺寸会保持。在 Windows 上,使用黑色的背景来填补旋转造成的缝隙, 如图 17-8 所示。在 OS X 上,使用透明的像素来填补缝隙。rotate()方法有一个可选 的 expand 关键字参数,如果设置为 True,就会放大图像的尺寸,以适应整个旋转 后的新图像。

利用 transpose()方法,还可以得到图像的“镜像翻转”。必须向 transpose()方法 传入 Image.FLIP_LEFT_RIGHT 或 Image.FLIP_TOP_BOTTOM。

catIm.transpose(Image.FLIP_LEFT_RIGHT).save('horizontal_flip.png')
catIm.transpose(Image.FLIP_TOP_BOTTOM).save('vertical_flip.png')

horizontal_flipvertical_flip

更改单个像素


//创建一个透明图片 大小为 100 *100
im = Image.new('RGBA', (100, 100))

//填充颜色 为x轴  0 - 99 y轴 0-49
for x in range(100):
    for y in range(50):
        im.putpixel((x, y), (210, 210, 210))

//填充颜色 为x轴  0 - 99 y轴 50-99
for x in range(100):
    for y in range(50, 100):
        im.putpixel((x, y), ImageColor.getcolor('darkgray', 'RGBA'))

im.save('putPixel.png')

putPixe