libJpeg 에도 버전이 있나?

개발 2024. 1. 2. 21:04

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

우리가 흔하게 쓰고 있는 libjpeg 라이브러리가 있습니다. 이미지를 jpeg 형식으로 인코딩하거나 디코딩 해주는 라이브러리 입니다. 

요기의 홈페이지 주소는 http://ijg.org/ 입니다. 

방문해보면 아래처럼 정말 단순한 화면만 표시되는데요.. ( 아직도 요런 페이지가 있다니 ㅋㅋ ) 

Independent JPEG Group

흠.. 여기서 도대체 버전별 정보를 어디서 찾으라는 거냐? ㅋ 

원하는 정보를 쉽게 찾을수 없어서 wikipia를 방문해보면 아래처럼 잘 정리되어 있습니다.  ( https://en.wikipedia.org/wiki/Libjpeg

VersionReleasedNew featuresITU T.81 JPEG CompatibleProprietary non-compatible extensions

1 1991
  • First release
  • Baseline or optimized JPEG
  • GIF or PPM output
2 1991
  • Internal improvements
  • More input/output formats
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
  • Progressive JPEG
  • jpegtran (convert between baseline and progressive)
6a 1996-02-07  
6b 1998-03-27
  • jpegtran extended to lossless rotate
(used by libjpeg-turbo and mozjpeg)
7 2009-06-27
  • jpegtran extended to lossless crop
  • T.851 Arithmetic Coding[19]
  • Scaled DCT[20]
8 2010-01-10
  • SmartScale extension (ITU rejected)[21][22]
  • jpegtran extended to use SmartScale
  • Internal fixes
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
  • YCoCg color
  • Lossless compression (1x1 DCT)[23]
9a 2014-01-19
  • "JFIFv2" scRGB Wide color gamut (standard unknown)
  • 8-12 bit color (standardJPEG)
9b 2016-01-17 Computation improvements
9c 2018-01-14 jpegtran -wipe
9d 2020-01-12
  • Code cleanup
  • Huffman optimization
  • x64 support (MSVC)
  • jpegtran -drop
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 표준과의 완전한 호환성을 유지하고, 인코딩에 많은 시간이 소요되는 방식입니다. 

 

 

 

 

 



: