PIL Image 旋转 Rotate函数的坑和解决方案
PIL Image旋转的坑
想做图片的90,180,270度旋转,原本使用的PIL.Image.rotate,但发现出来的图片长宽没有进行相应调整,导致图片有黑边,以下是有坑的代码和解决方案
有坑的代码
from PIL import Image def rotate(img_path): image = Image.open(img_path) angles = [90,180,270] for angle in angles: rotated = image.rotate(angle) rotated.save(img_path[:-4]+_+str(angle)+.jpg)
原图:
旋转之后的图: 这里可以看到如果旋转180还是可以的,但90和270度会产生黑边,原因是这里的旋转并没有将原图的长宽进行对应的改变,旋转之后的图和原图的长宽是一样的。
解决方案1:expand 参数设置为True
代码
from PIL import Image def rotate(img_path): image = Image.open(img_path) angles = [90,180,270] for angle in angles: rotated = image.rotate(angle,expand=True) rotated.save(img_path[:-4]+_+str(angle)+.jpg)
解决方案2:用transpose来做旋转
代码
from PIL import Image def rotate(img_path): image = Image.open(img_path) # FLIP_LEFT_RIGHT = 0 # FLIP_TOP_BOTTOM = 1 # ROTATE_90 = 2 # ROTATE_180 = 3 # ROTATE_270 = 4 # TRANSPOSE = 5 # TRANSVERSE = 6 angles = [Image.ROTATE_90,Image.ROTATE_180,Image.ROTATE_270] for angle in angles: rotated = image.transpose(angle) rotated.save(img_path[:-4]+_+str(angle)+.jpg)