Python编程快速上手 — 让繁琐工作自动化<三>三>
Pillow
是一个第三方Python
模块,用于 处理图像文件。该模块包含一些函数,可以很容易地裁剪图像、调整图像大小, 以及编辑图像的内容。
获取颜色值
from PIL import ImageColor
ImageColor.getcolor('red', 'RGBA')
用 Pillow 操作图像
加载一张图片到 Python 环境中
from PIL import Image
catIm = Image.open('zophie.png')
catIm.size
获取图片尺寸
width, height = catIm.size
catIm.filename
图片在本地的名称
catIm.format
和 catIm.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')
Image 对 象的 crop()方法接受一个矩形元组,返回一个 Image 对象,表示裁剪后的图像。裁剪 不是在原图上发生的,也就是说,原始的 Image 对象原封不动,crop()方法返回一 个新的 Image 对象。
//读取本地图片建立一个 Image对象
catIm = Image.open('zophie.png')
//拷贝一份
catCopyIm = catIm.copy()
//剪裁出一份
faceIm = catIm.crop((335, 345, 565, 560))
//把剪裁出来的图片粘贴到拷贝出来的图片上,位置为(0,0)
catCopyIm.paste(faceIm, (0, 0))
//保存图片
catCopyIm.save('pasted.png')
平铺图片
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')
调整图片大小
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')
旋转图片
图像可以用 rotate()方法旋转,该方法返回旋转后的新 Image 对象,并保持原始 Image 对象不变。
catIm.rotate(90).save('rotated90.png')
注意,当图像旋转 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')
更改单个像素
//创建一个透明图片 大小为 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')