AWS Lambda 에서 Pillow로 heic 이미지 썸네일 생성시 발생하는 문제

teal·2023년 1월 26일
0

사이드 프로젝트에서 s3에 이미지가 업로드 될때마다 썸네일을 생성하는 lambda 함수를 트리거로 추가했다. jpg, png, gif등의 파일들은 잘 동작하나 iphone에서 촬영한 heic파일은 아래의 코드에서 save실행시 지원하지 않는 확장자라며 오류가 발생한다.

def create_thumbnail(image_path, resized_path):
    with Image.open(image_path) as image:
        print(image.mode)
        if image.mode == "RGBA":
            image = image.convert("RGB")
        image.thumbnail((150, 150))
        image.save(resized_path)

image.save를 통해 tmp폴더에 heic를 jpg로 변환하는 과정에서 오류가 발생한것으로(최신버전에선 수정된것으로 보이는데 남이 만들어둔 레이어를 쓰고있어서 코드를 수정하는 방향으로 진행) 어차피 s3에 썸네일을 저장해야하는 상황이라 메모리에서 tmp폴더에 저장하고 s3에 업로드하는것이 아닌 메모리에서 곧바로 s3로 업로드하는 방식으로 변경하면 해결 가능하다

def create_thumbnail(image_path, key):
    im = Image.open(image_path)
    in_mem_file = BytesIO()
    if im.mode != 'RGB':
        im = im.convert('RGB')
    im.thumbnail((150, 150))
    im.save(in_mem_file, "JPEG", optimize=True, quality=100)
    in_mem_file.seek(0)
    post_bucket.put_object(
        Key=".".join(key.split(".")[:-1])+"_thumb.jpg",
        Body=in_mem_file,
        ContentType="image/jpeg",
    )
profile
고양이를 키우는 백엔드 개발자

0개의 댓글