图像可以用 rotate()方法旋转,该方法返回旋转后的新 Image 对象,并保持原始
Image 对象不变。rotate()的参数是一个整数或浮点数,表示图像逆时针旋转的度数。在交互式环境中输入以下代码:
>>> catIm.rotate(90).save('rotated90.png')
>>> catIm.rotate(180).save('rotated180.png')
>>> catIm.rotate(270).save('rotated270.png')
注意,可以连续调用方法,对 rotate()返回的 Image 对象直接调用 save()。第一个 rotate()和 save()调用得到一个逆时针旋转 90 度的新 Image
对象,并将旋转后的图像存入 rotated90.png。第二和第三个调用做的事情一样,但旋转了 180 度和 270 度。
结果如图 17-7 所示。
注意,当图像旋转 90 度或 270 度时,宽度和高度会变化。如果旋转其他角度,图像的原始尺寸会保持。在Windows 上,使用黑色的背景来填补旋转造成的缝隙,如图 17-8 所示。在 OS X
上,使用透明的像素来填补缝隙。rotate()方法有一个可选的 expand 关键字参数,如果设置为 True,就会放大图像的尺寸,以适应整个旋转后的新图像。例如,在交互式环境中输入以下代码:
>>> catIm.rotate(6).save('rotated6.png')
>>> catIm.rotate(6, expand=True).save('rotated6_expanded.png')
第一次调用将图像旋转 6 度,并存入 rotate.png(参见图 17-8 的左边的图像)。第二次调用将图像旋转 6 度,expand 设置为 True,并存入
rotate6_expanded.png(参见图 17-8 的右侧的图像)。
利用 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')
像 rotate()一样,transpose()会创建一个新 Image 对象。这里我们传入 Image.FLIP_ LEFT_RIGHT,让图像水平翻转,然后存入
horizontal_flip.png。要垂直翻转图像,传入Image.FLIP_TOP_BOTTOM,并存入 vertical_flip.png。结果如图 17-9 所示。