我正在使用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
我尝试过使用缩略图,但效果不佳。
答案 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)