使用PIL旋转时如何保持图像质量

时间:2013-07-23 22:13:57

标签: python python-imaging-library

基本上我试图通过用户界面旋转图像,但是我注意到每次旋转时图像质量都会严重下降。有谁知道如何解决这个问题?此外,当图像旋转时,每次都会裁掉部分图像。

这是一些照片 之前和之后: http://imgur.com/a/QESKs

这是代码:

def onRotate(self):
    tanTheta = float(hh)/float(ww) 
    theta = math.atan(tanTheta) * 57.2957795 # convert to degrees
    if theta > 0:
        angle = (90 - theta) * -1
        clockwise = True
    elif theta < 0:
        angle = (270 - theta) * -1
        clockwise = False
    else:
        tkMessageBox('Angle not okay', 'Try again!')
    rotated_small = photo_small.rotate(angle) 
    rotated_small.save('small_rotate.jpg')
    self.load_imgfile('small_rotate.jpg')

2 个答案:

答案 0 :(得分:7)

rotated_small = photo_small.rotate(angle, resample=Image.BICUBIC, expand=True)

这告诉它使用它可用的最高质量的插值算法,并扩展图像以包含完整的旋转尺寸而不是裁剪。文档没有说明背景将填充的颜色。

答案 1 :(得分:3)

图像是像素网格。如果旋转它(角度不是90的倍数),则必须将旋转的网格重新匹配到新的非旋转网格以显示图像。在这个过程中无法避免一些损失。

唯一的选择是将未旋转的图像保持在某个位置并总结多个旋转的角度,并始终从最初未旋转的图像构建旋转图像。