JPEG 이미지 인코딩 및 디코딩을 위한 코덱인 libjpeg-turbo

libjpeg 터보

libjpeg-turbo는 원래 libjpeg v6b의 MMX 가속 파생물인 libjpeg/SIMD를 기반으로 했습니다.

Linux에서 코덱과 관련하여 대부분의 사용자는 일반적으로 이에 대해 걱정하지 않습니다. 많은 배포판에서 이 문제는 일반적으로 애플리케이션을 보거나 편집하는 것 외에도 기본적으로 대상에 포함되어 이미 해결되었기 때문입니다. 일부 엑스트라를 포함한 모래.

그러나 사용자가 편집 작업이나 단순한 여가를 위해 특정 측면에서 성능을 향상시키려는 경우에는 어떻게 됩니까? 이 부분에서 모든 사용자가 참여하는 것은 아니지만 관심 있는 사람들을 위해 각 형식이 제공하는 장단점을 조사하는 경향이 있습니다.

그리고 이것은 우리가 오늘 이야기할 코덱이 들어오는 곳이며 JPEG 이미지 형식이 가장 인기 있는 형식 중 하나이지만 이것이 최고라는 의미는 아닙니다. 이것에 비해 많은 이점을 제공합니다.

libjpeg-turbo는 GitHub 저장소에 언급된 바와 같이 다른 형식에 비해 JPEG의 몇 가지 단점을 해결하는 솔루션입니다 .

libjpeg-turbo는 SIMD 명령을 사용하여 x86, x86-64, Arm, PowerPC 및 MIPS 시스템에서 벤치마크 JPEG 압축 및 압축 해제를 가속화하고 x86, x86-64 및 arm에서 프로그레시브 JPEG 압축을 가속화하는 JPEG 이미지 코덱입니다. 이러한 시스템에서 libjpeg-turbo는 일반적으로 libjpeg보다 2-6배 더 빠릅니다. 다른 모든 것은 동일합니다. 다른 유형의 시스템에서 libjpeg-turbo는 고도로 최적화된 Huffman 코딩 루틴 덕분에 libjpeg보다 훨씬 뛰어난 성능을 발휘할 수 있습니다. 많은 경우에 libjpeg-turbo의 성능은 독점적인 고속 JPEG 코덱의 성능과 경쟁합니다.

libjpeg-turbo는 전통적인 libjpeg API와 덜 강력하지만 더 간단한 TurboJPEG API를 모두 구현합니다. libjpeg-turbo는 또한 완전한 기능을 갖춘 Java 인터페이스뿐만 아니라 32비트 및 빅엔디안 픽셀 버퍼(RGBX, XBGR 등)로 압축/압축 해제할 수 있는 색 공간 확장을 제공합니다.

Libjpeg-turbo 는 기존 libjpeg 라이브러리를 기반으로 API/ABI를 준수하는 포크 ​​버전으로 , 최고 수준의 인코딩 및 디코딩 속도를 제공하도록 설계되었습니다. 표준 libjpeg API 외에도 자체 TurboJPEG API와 다양한 색상 렌더링 모델을 포함한 확장 기능을 제공하여 이미지를 32비트 픽셀 버퍼(RGBX, XBGR)로 압축하거나 디코딩할 수 있도록 합니다.

다른 아키텍처에서는 가속 효과가 그렇게 크지는 않지만, 최적화된 허프만 인코딩 함수를 사용하기 때문에 이 라이브러리는 libjpeg보다 눈에 띄게 빠르며 성능 면에서 고품질 독점 JPEG 코덱에 근접합니다.

ibjpeg-turbo가 최근 3.0 버전으로 새롭게 출시되었으며 , 이번 새 버전의 주요 혁신 사항은 다음과 같습니다.

  • 4:1:1 색상 서브샘플링에 대한 지원이 추가되어 품질 손실 없이 4:1:1 서브샘플링된 JPEG 이미지를 변환, 자르기 및 회전할 수 있을 뿐만 아니라 압축을 풀고 YUV 색상 모델로 변환할 수 있습니다.
  • 최적의 Huffman 테이블 계산이 크게 가속화되었습니다. 작은 이미지(256×256)의 경우 압축 시간을 최대 XNUMX배까지 줄일 수 있었습니다.
  • 채널당 12비트 색상 표현으로 JPEG 이미지에 산술 엔트로피 코딩을 적용하는 기능을 추가했습니다.
  • TurboJPEG API는 기존 제한을 제거하고 확장성을 높이기 위해 크게 재설계되었습니다. 예를 들어 모든 C 함수에는 이제 "tj3" 접두사가 붙습니다.
  • 많은 플래그와 모드가 함수 인수에서 일반 API 매개변수로 변환되었습니다.
  • 손실 및 무손실 모드에서 채널당 12비트 및 16비트 색상의 이미지를 지원합니다.
  • 무손실 JPEG 파일 모드가 추가되어 채널당 8, 12 및 16비트 색상의 이미지에 사용할 수 있습니다. 새로운 함수 jpeg_enable_lossless() 및 명령줄 옵션 "-lossless"가 추가되었습니다.
  • Java TurboJPEG API에서 더 이상 사용되지 않는 필드, 생성자 및 메서드를 제거했습니다.

마지막으로, 미래에 libjpeg-turbo의 작성자는 프로젝트 작업을 버그 수정이 포함된 업데이트만 릴리스하도록 제한할 계획임을 언급해야 합니다. 새 버전 3.1의 개발은 프로젝트 자금을 확보할 때까지 시작되지 않습니다.

코드에 관심 있는 분들을 위해 알려드리자면, 이 코드는 IJG, BSD 수정 버전, zlib 등 세 가지 BSD 유사 라이선스로 배포됩니다. 바이너리는 Linux, macOS, Windows용으로 제공됩니다. 자세한 내용 및 바이너리 다운로드는 다음 링크 에서 확인하실 수 있습니다 .


Google에서 선호하는 검색 엔진으로 추가