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')
新代码生成的旋转后的图:
图片在百度上随便找的,若有侵权请告知。
如果有帮助到各位,劳烦高抬贵手给个三连!