본문 바로가기
JS & TS/JS

[sharp] VipsJpeg: Invalid SOS parameters for sequential JPEG

by devson 2022. 10. 2.

sharp는 이미지 프로세싱에 있어 사용되는 라이브러리로
서비스에서 이미지 업로드 기능을 지원하는 경우 이미지 사이즈를 줄이기 위해 자주 사용된다.

 

이번 포스팅에는 sharp 사용 시 마주친 오류와 어떻게 처리하였는지에 대해 정리해보겠다.

 


나의 경우 sharp를 업로드한 이미지를 조회 시 리사이징하기 위해 사용하고 있다.

https://tech.mfort.co.kr/blog/2022-07-12-chat-image-upload/#리사이징된-이미지-요청-시-리사이징된-이미지를-생성하는-방식

CloudFront + Lambda@Edge 스택을 사용하여 업로드한 이미지 조회 시 sharp를 사용하여 리사이징 된 이미지를 생성하고 있다.

(참고: AWS 인프라 위에서 채팅 이미지 업로드부터 조회까지)

 

기능 오픈 이후 문제가 없었는데 갑자기 아래와 같이 VipsJpeg: Invalid SOS parameters for sequential JPEG 라는 오류 메세지가 나왔다.

 

관련해서 찾아보니 sharp github issue에 관련된 issue를 발견할 수 있었고 커미터인 lovell은 안드로이드 관련 버그일 것이라고 추정하고 있다.

덧붙여 이미지의 출처를 확신할 수 있다면 생성자에 옵션을 추가하는 방식으로 이 이슈를 단순하게 처리할 수 있다고 한다.

 

 

하지만 좀 더 아래로 내려보면 failOnError: false는 deprecated 되었으니 failOn: 'truncated' 를 쓰라고 안내해준다.

 

관련하여 테스트 코드truncated 옵션 테스트 용 이미지를 보니 failOn: 'truncated' 옵션은 짤린(truncated) 이미지가 아닌 이상 오류를 내지 않는 옵션인 것 같다.

(failOn: 'none' 옵션은 데이터 적으로 완전하지 않은 이미지여도 강제적으로 이미지 프로세싱 처리를 하도록 하는 옵션인 것 같다)

 

그래서 결과적으로는 아래와 같이 생성자에 failOn: 'truncated' 옵션을 추가해주니 더 이상 동일 오류가 발생하지 않았다.

    const resizedImage = await sharp(s3Object.Body, { failOn: 'truncated' }) // <==
        .rotate()
        .resize({width})
        .toBuffer();

 

 

'JS & TS > JS' 카테고리의 다른 글

Class method vs field function  (0) 2021.05.29

댓글