libJpeg 에도 버전이 있나?
개발 2024. 1. 2. 21:04우리가 흔하게 쓰고 있는 libjpeg 라이브러리가 있습니다. 이미지를 jpeg 형식으로 인코딩하거나 디코딩 해주는 라이브러리 입니다.
요기의 홈페이지 주소는 http://ijg.org/ 입니다.
방문해보면 아래처럼 정말 단순한 화면만 표시되는데요.. ( 아직도 요런 페이지가 있다니 ㅋㅋ )
- 최신버전인 jpegsrc.v9e.tar.gz 파일을 다운받을수 있는 링크와
- 다양한 버전의 소스를 받을수 있는 file 링크들 ( http://ijg.org/files/ )
- 그리고 FaQ 페이지 링크들
흠.. 여기서 도대체 버전별 정보를 어디서 찾으라는 거냐? ㅋ
원하는 정보를 쉽게 찾을수 없어서 wikipia를 방문해보면 아래처럼 잘 정리되어 있습니다. ( https://en.wikipedia.org/wiki/Libjpeg )
VersionReleasedNew featuresITU T.81 JPEG CompatibleProprietary non-compatible extensions
1 | 1991 |
|
2 | 1991 |
|
3 | 1992 | Internal and image quality improvements |
4 | 1992 | Internal and speed improvements |
4a | 1993-02-18 | |
5 | 1994-09-24 | Internal improvements and revised API |
5a | 1994-12-07 | |
5b | 1995-03-15 | |
6 | 1995-08-02 |
|
6a | 1996-02-07 | |
6b | 1998-03-27 |
|
7 | 2009-06-27 | |
8 | 2010-01-10 | |
8a | 2010-02-28 | RGBA |
8b | 2010-05-16 | Memory corruption & build fixes |
8c | 2011-01-16 | Option for selecting DCT block size (SmartScale) |
8d | 2012-01-15 | RGB JPEG (no color transform to YCbCr) |
9 | 2013-01-13 | |
9a | 2014-01-19 | |
9b | 2016-01-17 | Computation improvements |
9c | 2018-01-14 | jpegtran -wipe |
9d | 2020-01-12 |
|
9e | 2022-01-16 | ARM and ARM64 support (MSVC) |
Legend:
Old version, not maintained | Older version, still maintained | Current stable version |
여기서 주의깊게 봐야할 버전이 바로바로 6b ( v.6.2 ) 버전 이다.
1998년에 나온 버전으로 아주 오래되었지만, 아직도 유지가 되는 버전인데..
그 이유는 libjpeg-turbo 라는 프로젝트와 mozjpeg 라는 프로젝트에서 해당 버전의 libjpeg를 기반으로 개발되었기 때문이다.
그리고 6b 버전이후 거의 10년만에 업데이트된 버던7에서는 무손실 jpegtran 기능과 무슨 arithmetic coding 적용과 scaled DCT 으로 성능개선이 된것이 전부이다.
이후 버전 8 부터 버그랑 몇가지 기능들이 추가되기는 했지만, 하위버전 호환성을 유지하면서 jpeg에 새롭고 혁신적인 것이 추가되기는 어려운 상황으로 보인다. web 환경에 특화되어 있는 google에서 발표한 webP 형식처럼 새로운 술은 새부대가 아니고서는 혁신을 담아내기는 어려울듯 싶다.
이후 버전9 에서는 YCoCg 칼라스페이스 추가와 광색역(wide color gamut) 그리고 계산성능향상 ( computation improvements ) 등등의 변화가 추가되었다.
최신버전인 9e 버전에서는 msvc 빌드환경에서 arm / arm64 빌드가 지원된다고 한다.
추가로 6b 에서 파생되었다는 2가지 프로젝트에 대해서 간단하게 알고만 넘어가보자.
libjpeg-turbo
- libjpeg-turbo는 SIMD 지침을 사용하여 기본 JPEG 인코딩 및 디코딩을 가속화하는 libjpeg의 포크입니다.
- 일반적으로 libjpeg 보다 2~4배정도 인코딩 속도가 빠릅니다. ( 디코딩 속도는 대략 1.5배정도 )
- 현재 널리 사용되는 Linux 배포판(Fedora, Debian, Mageia, openSUSE 등), Mozilla 및 Chrome을 포함하여 많은 프로젝트에서 libjpeg 대신 libjpeg-turbo를 사용하고 있습니다.
- libjpeg-turbo는 SmartScale을 지원하지 않기로 결정했습니다.
- 왜냐하면 SmartScale은 ITU-T 표준이 아니고 자체 연구에서 이 기능(및 DCT 스케일링)이 비효율적이라고 판단했기 때문libjpeg v7, v8 및 v9는 이전 릴리스와의 ABI 호환성을 중단했습니다.
mozjpeg
- mozjpeg는 Josh Aas와 Mozilla Research의 다른 사람들이 수행한 libjpeg-turbo의 포크입니다.
- 이미지 품질을 유지하면서 코딩 효율성 향상을 통해 파일 크기(약 10%)를 줄여서 저장할수 있게 합니다.
- 저장된 파일 크기가 작다는 것은 web 환경에서 전송 시간을 줄일수 있어서 웹페이지 로딩 시간을 단축할 수 있습니다.
- 이를 위해 JPEG 표준과의 완전한 호환성을 유지하고, 인코딩에 많은 시간이 소요되는 방식입니다.