libjpeg

libjpeg
原作者トム・レーン
開発者
  • 独立系JPEGグループ
  • グイド・フォルベディング[ 1 ] [ 2 ]
初回リリース1991年10月7日 (1991年10月7日
安定版リリース
9f [ 3 ] ウィキデータで編集する / 2024年1月14日 (2024年1月14日
リポジトリwww .ijg .org /ファイル/
書かれたC
オペレーティング·システムクロスプラットフォーム
タイプ図書館
ライセンスカスタムBSD風 (フリーソフトウェア)
Webサイト

libjpegは、 JPEG画像データ形式を扱うための機能を備えたフリーライブラリです。JPEGコーデック(エンコードとデコード)に加え、JPEGデータを扱うための様々なユーティリティを実装しています。C言語で記述されておりBSDライクなカスタムパーミッシブフリーソフトウェアライセンス(帰属表示)に基づき、ソースコードと共にフリーソフトウェアとして配布されています。オリジナルのバージョンはIndependent JPEG Group(IJG)によってメンテナンスおよび公開されています。また、追加機能を備えた フォークもいくつか存在します。

JPEG JFIF画像はウェブ上で広く使用されています。圧縮率を調整することで、ファイルサイズと画質のバランスを最適に保てます。[ 4 ]

ユーティリティ

次のユーティリティ プログラムは libjpeg と一緒に出荷されます。

cjpegとdjpeg
JPEG とその他の一般的な画像ファイル形式間の変換を実行します。
rdjpgcom と wrjpgcom
JPEG ファイルにテキストコメントを挿入および抽出します。
jpegtran
既存の JPEG ファイルの変換用。

jpegtran

jpegtranはJPEGデータを再エンコードせずに変換します(ここではユーザーインターフェイスCropGUIを使用)

コマンドラインプログラムjpegtran は、 DCT係数の表現を再フォーマットおよび再コード化するための機能、実際の画像データの変換のための機能、JPEGファイル内の補助データの削除のための機能を提供します。係数の表現に関する変換は以下のとおりです。

これらの変換はそれぞれ完全にロスレスかつ可逆的です。画像データに対する変換は以下のとおりです。

  • 一部の画像プログラムによって挿入される非標準のアプリケーション固有のデータを排除する。
  • ファイルに対して次のような特定の変換を実行します。
    • カラーチャンネルの破棄(グレースケールへの変換)、
    • 90度ずつ回転および反転、
    • 画像ブロックの境界(8×8または16×16ピクセルごと)での切り取りまたは結合、
    • 再スケーリング。[ 8 ]

これらは、保存された画像データに関してのみロスレスかつ可逆的です。画像データの非可逆量子化(世代損失)を繰り返す再エンコードは発生しません。

歴史

Independent JPEG Group (IJG) による JPEG 実装は、1991年10月7日に初めて公開され、それ以来、大幅に改良されてきました。当初の開発は主にTom Laneによって行われました。IJGのオープンソース実装は主要なオープンソースパッケージの一つであり、JPEG 規格の成功の鍵となりました。多くの企業が、画像エディタやウェブブラウザなど、様々な製品に IJG を組み込みました。[ 9 ]

1994年9月24日にリリースされたバージョン5では、コードベース全体が書き直されました。埋め込みテキストコメントを処理するためのユーティリティプログラムrdjpgcomwrjpgcomが導入されました。1995年8月2日にリリースされたバージョン6では、プログレッシブJPEGがサポートされ、初めてユーティリティプログラムjpegtranが追加されました。このユーティリティはバージョン6bで画像の回転と反転、グレースケール縮小の機能が追加されました。

libjpeg-turboとその子孫

1998年3月27日のlibjpegバージョン6bから、宮坂勝はx86 SIMD最適化を含むlibjpeg/SIMDというブランチをフォークしました。2009年にはTigerVNCプロジェクトとVirtualGLプロジェクトから多大な貢献を受けました。これを基に、2010年にlibjpeg-turboプロジェクトが設立されました。[ 10 ]

2014年3月4日、ファイルサイズ最適化フォークMozJPEGの最初のバージョンが公開されました。このバージョンでは、Mozilla ResearchのJosh Aasがx264の主要開発者Loren MerrittのPerlスクリプトjpegcrushを改良し、libjpeg-turboのコードベースに統合しました。[ 11 ]

2014年7月10日、Mozillaはバージョン2.0をリリースしました。このバージョンでは主にトレリス量子化が追加され、ベースラインJPEGのサイズも削減できるようになりました。Facebookは寄付を行いました。次期バージョンの開発には6 ドルが支払われ[ 12 ]CloudFlareはMozJPEGの改良のために開発者を割り当てた[ 13 ] 。

2019年、libjpeg-turboはJPEG形式のISOおよびITU承認のリファレンス実装となった。 [ 14 ]

2024年4月、Googleは新しいJPEGコーディングライブラリであるJpegliを導入しました。これは、強化された機能と高品質圧縮設定での圧縮率35%向上を提供し、コーディング速度はMozJPEGに匹敵します。[ 15 ]

IJGのリーダーシップの変更

11年の歳月とリーダーシップの変更を経て、Guido Vollbeding率いるIJGはlibjpegの新しいバージョン(7から9)をリリースしましたが、それぞれが以前のバージョンとのABI互換性を破壊しました。[ 16 ] 6xシリーズの後に予定されていた変更は実現しませんでした。[ 17 ] バージョン7では、特許の問題で以前に拒否された算術符号化のサポートとjpegtran()のクロップ機能が導入されました。[ 17 ]-crop

バージョン8と9は、基本的に物議を醸す[ 18 ]互換性のないフォーマット拡張を導入するものでした。これらは、既存の標準化されたソリューションよりも効果がなく、劣っていると広く認識されています[ 19 ] 。これらの標準化はITU-Tに提出されましたが、却下されました。当初の主催者であるトム・レーン氏をはじめとする人々は、これらの変更はIJGの目標から逸脱するものだと批判しています[ 18 ] 。

バージョン

バージョン リリース 新機能
ITU T.81 JPEG互換
サポート対象外:1 1991
  • 最初のリリース
  • ベースラインまたは最適化されたJPEG
  • GIFまたはPPM出力
サポート対象外:21991
  • 内部の改善
  • より多くの入出力形式
サポート対象外:31992 内部および画質の改善
サポート対象外:41992 内部および速度の改善
サポート対象外:4a1993年2月18日
サポート対象外:51994年9月24日 内部の改善と改訂されたAPI
サポート対象外:5a1994年12月7日
サポート対象外:5b1995年3月15日
サポート対象外:61995年8月2日
  • プログレッシブJPEG
  • jpegtran (ベースラインとプログレッシブ間の変換)
サポート対象外:6a1996年2月7日
サポート対象:6b1998年3月27日
  • jpegtran をロスレス回転に拡張

( libjpeg-turboMozJPEGJpegliで使用)

サポート対象外:72009年6月27日
  • jpegtran をロスレスクロップに拡張
  • T.851算術符号化[ 20 ]
  • スケールDCT [ 21 ]
独自の非互換性拡張機能
サポート対象外:82010年1月10日
  • スマートスケール拡張(ITUは拒否)[ 22 ] [ 23 ]
  • jpegtran が SmartScale を使用するように拡張されました
  • 内部修正
サポート対象外:8a2010年2月28日 RGBA
サポート対象外:8b2010年5月16日 メモリ破損とビルドの修正
サポート対象外:8c2011年1月16日 DCTブロックサイズを選択するオプション(SmartScale)
サポート対象外:8日2012年1月15日 RGB JPEG(YCbCrへの色変換なし)
サポート対象外:92013年1月13日
サポート対象外:9a2014年1月19日
  • JFIFv 2」scRGB広色域(規格不明)
  • 8~12ビットカラー(標準JPEG)
サポート対象外:9b2016年1月17日 計算の改善
サポート対象外:9セント2018年1月14日 jpegtran -wipe
サポート対象外:9日2020年1月12日
  • コードのクリーンアップ
  • ハフマン最適化
  • x64 サポート (MSVC)
  • jpegtran -drop
サポート対象外:9e2022年1月16日 ARM および ARM64 サポート (MSVC)
最新バージョン:9階2024年1月14日
  • ARM64EC サポート (MSVC)
  • Xcodeビルドシステム
  • C++Builder/RAD Studio ビルド システム
伝説:
サポートされていません
サポートされている
最新バージョン
プレビュー版
将来のバージョン

フォーク

よく知られているフォークとしては、実行速度を最適化する libjpeg-turbo と、より小さなファイル サイズを最適化する MozJPEG があります。

ISOにも同様の名称のライブラリがあり、JPEG、 JPEG XTJPEG LS規格の完全な実装を目指しています。[ 25 ]

libjpeg-turbo

libjpeg-turbo
開発者libjpeg-turbo プロジェクト
初回リリース2010年11月19日 (2010年11月19日
安定版リリース
3.1.3 [ 26 ] ウィキデータで編集する / 2025年12月10日 (2025年12月10日
リポジトリgithub.com / libjpeg-turbo
Webサイトlibjpeg-turbo .org

libjpeg-turboはlibjpegのフォークであり、 SIMD命令を使用してベースラインJPEGのエンコードとデコードを高速化します。現在、多くのプロジェクトがlibjpegの代わりにlibjpeg-turboを使用しています。これには、人気のLinuxディストリビューション(FedoraDebianMageiaopenSUSEなど)、MozillaChromeが含まれます。[ 27 ] [ 28 ] [ 29 ]パフォーマンス以外にも、古いlibjpeg v6bリリースとのABI後方互換性を維持できるため、一部のプロジェクトではlibjpeg-turboの使用を選択しました。[ 30 ] libjpeg v7、v8、v9は以前のリリースとのABI互換性が失われました。[ 16 ]

libjpeg-turboは、libjpeg v7に見られる標準準拠の算術符号化とロスレスクロップ機能を実装しています。libjpeg v7またはv8 ABIと互換性を持つように設定することもできますが、DCTスケーリングと、DCTスケーリングを基盤とする独自のSmartScaleを実装しています。[ 31 ] libjpeg-turboはSmartScaleをサポートしていません。これは、SmartScaleがITU-T標準ではないことと、libjpeg-turbo自身の調査でSmartScale(およびDCTスケーリング)が効果的ではないことが判明したためです。[ 21 ]さらに、libjpeg v9の主要な新機能はSmartScale形式に固有のものだけであるため、libjpeg-turboプロジェクトはlibjpeg v9のエミュレーションを断念しました。

2019年以降、libjpeg-turboはISO/IEC 10918-7とITU-T T.873として利用可能な2つのJPEGリファレンス実装の1つです。[ 14 ]もう1つのリファレンス実装はISO libjpegで、JPEG XTとJPEG LSのサポートも含まれています。

MozJPEG

MozJPEG
開発者モジラリサーチ
初回リリース2014年3月4日 (2014年3月4日
安定版リリース
4.1.5 / 2023年10月12日[ 32 ] (2023-10-12)
Webサイトgithub .com /mozilla /mozjpeg

MozJPEGは、Mozilla ResearchのJosh Aas氏らによってlibjpeg-turboからフォークされたものです。画質を維持しながら符号化効率を向上させることでファイルサイズ(約10%)を削減し、ひいては転送時間を短縮することで、ウェブページの読み込み時間を短縮することを目的としています。これを実現するために、JPEG標準との完全な互換性を維持しながら、エンコード(非対称性)により多くの処理能力を使用します。デコーダー側への変更は不要です。

MozJPEGが高圧縮を実現するために用いる技術には、ハフマン木の最適化、DCT係数のスペクトルを最適な形で個別のスキャンに分割するプログレッシブ符号化、そしてトレリス量子化などが含まれます。さらに、プリセットはファイルサイズを最小化するように積極的に調整されています。

libjpeg-turboに加えて、MozJPEGはLoren MerrittによるPerlスクリプトであるjpegcrushをベースに構築されています。[ 11 ] [ 33 ]

ジェグリ

ジェグリ
開発者グーグル
初回リリース2020年11月14日 (2020-11-14)
安定版リリース
0.11.0 [ 34 ] / 2024年9月13日 (2024-09-13)
Webサイトgithub .com /google /jpegli

2024年4月、Googleは新しいJPEGコーディングライブラリであるJpegliを導入しました。これは、強化された機能と高品質圧縮設定での35%の圧縮率の向上を提供し、コーディング速度はMozJPEGに匹敵します。[ 35 ]

ISO libjpeg

ISO/IEC Joint Photography Experts Groupは、ベースJPEG(ISO/IEC 10918-1および18477-1)およびJPEG XT拡張(ISO/IEC 18477 Parts 2および6-9)、ならびにロスレスJPEG-LS(ISO/IEC 14495)の参照ソフトウェア実装を維持管理している。[ 36 ]また、MozJPEGの一部の最適化も含まれている。libjpegという名前もあるが、Independent JPEG Group(IJG)が提供するソースコードとは無関係であり、2007年以降にIJGが導入した独自の拡張はサポートしていない。

参照

参考文献

  1. ^ Göhler, Lars (2020年4月29日). 「Independent JPEG Groupのlibjpeg(Ver. 9d)の新バージョンが利用可能になりました」 . JPEGリファレンス. Independent JPEG Group . 2021年1月25日閲覧
  2. ^ Friesenhahn, Bob (2020年6月6日). 「Re: [Libjpeg-devel-6x] 4 Integer Overflow Errors in libjpeg-9c」 . libjpeg-devel-6x (メーリングリスト) . 2021年1月25日閲覧唯一の懸念は、Guido Vollbedingがこのメーリングリストに登録していない可能性が高く、IJG JPEGは基本的に1人によって開発されていることです。
  3. ^ 「Independent JPEG Group」 . 2024年1月27日閲覧
  4. ^ JPEG JFIF
  5. ^ Jpegcropの設定とオプションの説明
  6. ^ Filmic Games >> 特許制度の最大の失敗は… 2012年9月1日、 Wayback Machineアーカイブ
  7. ^ 680385 - Firefox で算術符号化された JPEG が表示されない
  8. ^新しいjpegtran機能
  9. ^ JPEGホームページ
  10. ^ "libjpeg-turbo" . libjpeg-turbo .
  11. ^ a b André Kramer (heise.de-Newsticker)、2013 年 1 月 14 日: Mozilla-Encoder の詳細 JPEG-Kompression
  12. ^ Sebastian Grüner、2014 年 7 月 16 日: MozJPEG 2.0: Facebook unterstützt JPEG-Encoder von Mozilla
  13. ^ “CloudFlare の Mozillas JPEG エンコーダのベイトラゲン” . 2014 年 7 月 30 日。
  14. ^ a b「ISO/IEC 10918-7:2019 情報技術 - 連続階調静止画像のデジタル圧縮および符号化 - パート7:参照ソフトウェア。ISO 「T.873(05/19):情報技術 - 連続階調静止画像のデジタル圧縮および符号化:参照ソフトウェアwww.itu.int
  15. ^ 「Jpegliの紹介:新しいJPEGコーディングライブラリ」。Googleオープンソースブログ。2024年4月3日。2024年4月3日時点のオリジナルよりアーカイブ2024年4月4日閲覧。
  16. ^ a b「libjpeg: API/ABI変更レビュー」 。 2017年10月28日閲覧
  17. ^ a b Mans Rullgard (Hardwarebug.org)、2009年8月4日: IJGが復活Archived 2014-07-16 at the Wayback Machine
  18. ^ a b Lane, Tom (2013年1月16日). 「Libjpeg-turbo-users、jpeg-9、API/ABI互換性、そしてこのプロジェクトの将来的な役割」 . fedoraproject.org . 2014年1月3日時点のオリジナルよりアーカイブ。
  19. ^ Rullgard, Mans (2010年2月1日). 「IJGが再びスイング、そしてミス」 . Hardwarebug . 2024年12月10日時点のオリジナルよりアーカイブ
  20. ^ 「ITU-T T.81(JPEG-1)ベースの代替算術符号化器を用いた静止画像符号化」(pdf)。2009年9月。
  21. ^ a b「libjpeg-turbo | 概要 / DCTスケーリングとSmartScaleの有用性に関する研究」。libjpeg -turbo.org
  22. ^ ITU-T JPEG-Plus提案R3
  23. ^ JPEGの進化
  24. ^ JPEG 9 ロスレス符号化
  25. ^ “Libjpeg” . GitHub . 2021年10月6日.
  26. ^ 「リリース 3.1.3」 2025年12月10日. 2025年12月10日閲覧
  27. ^ libjpeg-turbo を使用または提供するソフトウェア。2012年2月9日。
  28. ^問題48789 – chromium – libjpeg の代わりに libjpeg-turbo を使用してください。2011年4月14日。
  29. ^バグ 698519 – libjpeg-turbo 1.2 へのアップデート。2012年2月28日
  30. ^ F14用のlibjpeg。2012年2月9日。
  31. ^ libjpeg-turbo READMEファイル2018年12月14日Wayback Machineアーカイブ
  32. ^ "リリース · mozilla/mozjpeg" . github.com . 2022年8月14日閲覧
  33. ^ Andreas Donath (golem.de)、2014 年 3 月 6 日: Mozilla は JPEG をより強力に保存する予定です
  34. ^ Jpegli 変更ログ
  35. ^ 「Jpegliの紹介:新しいJPEGコーディングライブラリ」。Googleオープンソースブログ。2024年4月3日。2024年4月3日時点のオリジナルよりアーカイブ2024年4月4日閲覧。
  36. ^ 「Jpeg - Jpeg Xt」