【问题标题】:PIL resize/thumbnail cropping top bit of an image (portrait)PIL 调整大小/缩略图裁剪图像的顶部(纵向)
【发布时间】:2013-12-14 01:40:19
【问题描述】:

我正在使用 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

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

【问题讨论】:

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


    【解决方案1】:

    我认为您进行了太多 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)
    

    【讨论】:

      猜你喜欢
      • 2013-02-20
      • 2013-08-28
      • 2012-03-13
      • 2023-03-28
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 2013-03-01
      • 1970-01-01
      相关资源
      最近更新 更多