Project: Lambda + S3 To Resize Images (Part 4)

Download the layer zip file by clicking here

Please save this on your local machine into Data Science Infinity/AWS/Lambda

Lambda Resize Code:

import boto3
from PIL import Image
import io

s3 = boto3.client('s3')

def lambda_handler(event, context):
    source_bucket = event['Records'][0]['s3']['bucket']['name']
    key = event['Records'][0]['s3']['object']['key']
    image = get_s3_image(source_bucket, key)
    image = resize_image(image)
    save_image_to_s3(image, 'destination-bucket-name', key)

def get_s3_image(bucket, key):
    response = s3.get_object(Bucket=bucket, Key=key)
    image = Image.open(io.BytesIO(response['Body'].read()))
    return image

def resize_image(image):
    image.thumbnail((100, 100))

    # Convert RGBA to RGB if necessary
    if image.mode == 'RGBA':
        image = image.convert('RGB')
    
    buffer = io.BytesIO()
    image.save(buffer, 'JPEG')
    buffer.seek(0)
    return buffer

def save_image_to_s3(image, bucket, key):
    s3.upload_fileobj(image, bucket, key)


Complete and Continue