PIL调整大小/缩略图裁剪图像的最高位(肖像)

时间:2013-12-13 16:59:15

标签: python image python-imaging-library image-resizing

我正在使用PIL调整上传到服务器的图像的大小。我尝试了一种简单的算法来调整最长边上的图像。但是当图像是肖像时,它正在裁剪一些顶部。我想我在数学公式中犯了一个错误。我们非常感谢您的帮助。

def scale_to_size(im1, local_image, size):
    width = int(config['image_sizes'][size]['width'])
    height = int(config['image_sizes'][size]['height'])

    wpercent = int((width/float(im1.size[0])))
    hsize = int((float(im1.size[1])*float(wpercent)))
    im2 = im1.resize((wpercent, hsize), Image.ANTIALIAS)

    scaled_img = _rewrite_file_name(local_image, size) 
    im2.save(scaled_img)
    return scaled_img

def _rewrite_file_name(path, size):
    fileName, fileExt = os.path.splitext(path)
    return fileName + "_" + size + fileExt

if __name__ == '__main__':
    size = 'medium'
    img = '/Users/.../tmp/photo.JPG'
    im1 = Image.open(img)
    scale_to_size(im1, img, size)

宽度: 小:180 中:300 大:600

我尝试过使用缩略图,但效果不佳。

1 个答案:

答案 0 :(得分:0)

我认为你做了太多的int-> float float-> int转换。结果是您丢失了一些信息,而且您使用的是wpercent而不是width。您的代码已修复:

def scale_to_size(im1, local_image, size):
    width = int(config['image_sizes'][size]['width'])

    wpercent = float(width)/im1.size[0]
    hsize = int(im1.size[1]*wpercent)
    im2 = im1.resize((width, hsize), Image.ANTIALIAS)

    scaled_img = _rewrite_file_name(local_image, size)
    im2.save(scaled_img)
    return scaled_img

def _rewrite_file_name(path, size):
    fileName, fileExt = os.path.splitext(path)
    return fileName + "_" + size + fileExt

if __name__ == '__main__':
    size = 'medium'
    img = '/Users/.../tmp/photo.JPG'
    im1 = Image.open(img)
    scale_to_size(im1, img, size)