Python 需要在AmazonS3上调整和替换数以百万计的图像

Python 需要在AmazonS3上调整和替换数以百万计的图像,python,amazon-s3,Python,Amazon S3,目前,我的后端使用Django,前端使用iOS。用户可以从iOS应用程序中拍照并上传到AmazonS3。该应用程序向Django提供了这些图像的url,以便用户以后可以检索它们 这是一个非常简单的设置。然而,我们最近遇到了一个问题。图像需要重新调整大小,以便用户的下载速度更快。Django由一个postgresql数据库支持,该数据库存储所有图像链接 这造成了另一个问题,因为数据库已经包含指向旧图像的url链接,所以我需要找到一种方法,批量下载某个bucket中的所有图像,重新调整它们的大小,然

目前,我的后端使用Django,前端使用iOS。用户可以从iOS应用程序中拍照并上传到AmazonS3。该应用程序向Django提供了这些图像的url,以便用户以后可以检索它们

这是一个非常简单的设置。然而,我们最近遇到了一个问题。图像需要重新调整大小,以便用户的下载速度更快。Django由一个postgresql数据库支持,该数据库存储所有图像链接

这造成了另一个问题,因为数据库已经包含指向旧图像的url链接,所以我需要找到一种方法,批量下载某个bucket中的所有图像,重新调整它们的大小,然后将它们重新上载到S3,以替换旧图像,使其具有与旧图像相同的图像名称


有没有一种类似python的方法可以做到这一点?

让我们假设我们使用一个图像库,比如

示例用法:

from PIL.Image import Image, ANTIALIAS

img = Image.open('your_image_filename')
ogn_size = img.size  # gives you a tuple (x, y)

# base on ogn_size do proportional resizing, let's say by 50%. also apply the recommended
# downsizing high quality filter ANTIALIAS
image_half = img.resize( int(ogn_size[0] * 0.5), int(ogn_size[1] * 0.5), ANTIALIAS )

# more stuff to do, such as optimization on save
image_half.save( "your_image_filename_half", optimize=True,quality=80 )

请阅读文档,了解您可以在生产代码库中使用的更多选项和API

您确定所有客户都需要这些吗?就我个人而言,如果我发现我在您的服务中存储的所有图像的质量都降低了,我会非常生气。@F.J我们考虑过这些问题,但质量对于移动设备来说太高了。它为使用3G或LTE连接的客户创建了比正常更长的检索时间。@F.J Second。我的建议是,在这种情况下,检测移动连接并提供缩小版本的图像,而不是对原始版本的所有内容进行有损转换。缓存缩小的版本将有助于解决负载问题,这样您就不会在客户中引起合理的愤怒。@AaronMiller我喜欢您的建议。您应该运行并减小图片的大小/质量,但也要保留原始图片,如果用户想要更快的连接,他们可以选择它并访问较低质量的图像。@enginefree我实际上建议在慢速/高延迟连接上默认为低质量,对于那些不介意在加载时点击的用户,可以选择以全质量查看。当然,这假设检测糟糕的连接是可行的。