繁体   English   中英

使用 AWS S3/Lambda 动态调整图像大小

[英]Dynamically resizing images using AWS S3/Lambda

所以我有一个 web 应用程序,它按照这个原则将图像存储在一个桶中(具有用户 ID 名称的文件夹,具有用户 ID 名称的图片 + 受尊重的用户 ID 文件夹中的一些随机字符)。

现在我已经实现了一个 python 脚本,它从单个存储桶(根文件夹或我指定的任何文件夹)获取上传的图像并将其输出到我指定的另一个存储桶/文件夹。 我只是想知道是否可以根据我的情况实时执行此操作(我什至不需要将调整大小的图片导出到另一个存储桶,它们可以保留在原始上传到的同一文件夹中)。 这是我现在正在使用的脚本的一部分。 任何帮助表示赞赏。

s3_client = boto3.client('s3')
     
def resize_image(image_path, resized_path):
    with Image.open(image_path) as image:
        image.thumbnail((128, 128))
        image.save(resized_path)
     
def handler(event, context):
    for record in event['Records']:
        bucket = record['s3']['bucket']['name']
        key = record['s3']['object']['key'] 
        download_path = '/{}{}'.format(uuid.uuid4(), key)
        upload_path = '/resized-{}'.format(key)
        
        s3_client.download_file(bucket, key, download_path)
        resize_image(download_path, upload_path)
        s3_client.upload_file(upload_path, '{}-resized'.format(bucket), key)

啊:看起来您从 Lambda 文档中获取了示例代码: 教程:将 AWS Lambda 与 Amazon S3 结合使用 - AWS Lambda

您可以将Amazon S3 事件配置为在将新的 object 添加到 S3 存储桶时触发 AWS Lambda function。 事实上,这就是教程的运作方式。 这实际上是“实时”的,因为它会在上传 object 时立即触发。 (只需配置前缀,这样它就不会触发无限循环。)

自己调整图像大小的另一种方法是使用可以即时调整大小的服务,例如:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM