| libjpeg | |
|---|---|
| 原作者 | トム・レーン |
| 開発者 | |
| 初回リリース | 1991年10月7日 (1991年10月7日) |
| 安定版リリース | |
| リポジトリ | www |
| 書かれた | 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 は、 DCT係数の表現を再フォーマットおよび再コード化するための機能、実際の画像データの変換のための機能、JPEGファイル内の補助データの削除のための機能を提供します。係数の表現に関する変換は以下のとおりです。
- JPEGファイルのハフマン符号化層を最適化して圧縮率を高める。
- プログレッシブJPEG形式とシーケンシャルJPEG形式間の変換
- エントロピー符号化層におけるハフマン符号化と算術符号化間の変換。[ 5 ] [ 6 ] [ 7 ]
これらの変換はそれぞれ完全にロスレスかつ可逆的です。画像データに対する変換は以下のとおりです。
- 一部の画像プログラムによって挿入される非標準のアプリケーション固有のデータを排除する。
- ファイルに対して次のような特定の変換を実行します。
- カラーチャンネルの破棄(グレースケールへの変換)、
- 90度ずつ回転および反転、
- 画像ブロックの境界(8×8または16×16ピクセルごと)での切り取りまたは結合、
- 再スケーリング。[ 8 ]
これらは、保存された画像データに関してのみロスレスかつ可逆的です。画像データの非可逆量子化(世代損失)を繰り返す再エンコードは発生しません。
歴史
Independent JPEG Group (IJG) による JPEG 実装は、1991年10月7日に初めて公開され、それ以来、大幅に改良されてきました。当初の開発は主にTom Laneによって行われました。IJGのオープンソース実装は主要なオープンソースパッケージの一つであり、JPEG 規格の成功の鍵となりました。多くの企業が、画像エディタやウェブブラウザなど、様々な製品に IJG を組み込みました。[ 9 ]
1994年9月24日にリリースされたバージョン5では、コードベース全体が書き直されました。埋め込みテキストコメントを処理するためのユーティリティプログラムrdjpgcomとwrjpgcomが導入されました。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 |
| |
| サポート対象外:2 | 1991 |
| |
| サポート対象外:3 | 1992 | 内部および画質の改善 | |
| サポート対象外:4 | 1992 | 内部および速度の改善 | |
| サポート対象外:4a | 1993年2月18日 | ||
| サポート対象外:5 | 1994年9月24日 | 内部の改善と改訂されたAPI | |
| サポート対象外:5a | 1994年12月7日 | ||
| サポート対象外:5b | 1995年3月15日 | ||
| サポート対象外:6 | 1995年8月2日 |
| |
| サポート対象外:6a | 1996年2月7日 | ||
| サポート対象:6b | 1998年3月27日 |
( libjpeg-turbo、MozJPEG、Jpegliで使用) | |
| サポート対象外:7 | 2009年6月27日 | ||
| 独自の非互換性拡張機能 | |||
| サポート対象外:8 | 2010年1月10日 | ||
| サポート対象外:8a | 2010年2月28日 | RGBA | |
| サポート対象外:8b | 2010年5月16日 | メモリ破損とビルドの修正 | |
| サポート対象外:8c | 2011年1月16日 | DCTブロックサイズを選択するオプション(SmartScale) | |
| サポート対象外:8日 | 2012年1月15日 | RGB JPEG(YCbCrへの色変換なし) | |
| サポート対象外:9 | 2013年1月13日 | ||
| サポート対象外:9a | 2014年1月19日 | ||
| サポート対象外:9b | 2016年1月17日 | 計算の改善 | |
| サポート対象外:9セント | 2018年1月14日 | jpegtran -wipe | |
| サポート対象外:9日 | 2020年1月12日 |
| |
| サポート対象外:9e | 2022年1月16日 | ARM および ARM64 サポート (MSVC) | |
| 最新バージョン:9階 | 2024年1月14日 |
| |
フォーク
よく知られているフォークとしては、実行速度を最適化する libjpeg-turbo と、より小さなファイル サイズを最適化する MozJPEG があります。
ISOにも同様の名称のライブラリがあり、JPEG、 JPEG XT、JPEG LS規格の完全な実装を目指しています。[ 25 ]
libjpeg-turbo
| libjpeg-turbo | |
|---|---|
| 開発者 | libjpeg-turbo プロジェクト |
| 初回リリース | 2010年11月19日 (2010年11月19日) |
| 安定版リリース | |
| リポジトリ | github.com |
| Webサイト | libjpeg-turbo |
libjpeg-turboはlibjpegのフォークであり、 SIMD命令を使用してベースラインJPEGのエンコードとデコードを高速化します。現在、多くのプロジェクトがlibjpegの代わりにlibjpeg-turboを使用しています。これには、人気のLinuxディストリビューション(Fedora、Debian、Mageia、openSUSEなど)、Mozilla、Chromeが含まれます。[ 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 | |
|---|---|
MozJPEGはDCT係数のスペクトルのいくつかの分割を試みる | |
| 開発者 | モジラリサーチ |
| 初回リリース | 2014年3月4日 (2014年3月4日) |
| 安定版リリース | |
| Webサイト | github |
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 |
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が導入した独自の拡張はサポートしていない。
参照
参考文献
- ^ Göhler, Lars (2020年4月29日). 「Independent JPEG Groupのlibjpeg(Ver. 9d)の新バージョンが利用可能になりました」 . JPEGリファレンス. Independent JPEG Group . 2021年1月25日閲覧。
- ^ 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人によって開発されていることです。
- ^ 「Independent JPEG Group」 . 2024年1月27日閲覧。
- ^ JPEG JFIF
- ^ Jpegcropの設定とオプションの説明
- ^ Filmic Games >> 特許制度の最大の失敗は… 2012年9月1日、 Wayback Machineにアーカイブ
- ^ 680385 - Firefox で算術符号化された JPEG が表示されない
- ^新しいjpegtran機能
- ^ JPEGホームページ
- ^ "libjpeg-turbo" . libjpeg-turbo .
- ^ a b André Kramer (heise.de-Newsticker)、2013 年 1 月 14 日: Mozilla-Encoder の詳細 JPEG-Kompression
- ^ Sebastian Grüner、2014 年 7 月 16 日: MozJPEG 2.0: Facebook unterstützt JPEG-Encoder von Mozilla
- ^ “CloudFlare の Mozillas JPEG エンコーダのベイトラゲン” . 2014 年 7 月 30 日。
- ^ a b「ISO/IEC 10918-7:2019 情報技術 - 連続階調静止画像のデジタル圧縮および符号化 - パート7:参照ソフトウェア」。ISO 。「T.873(05/19):情報技術 - 連続階調静止画像のデジタル圧縮および符号化:参照ソフトウェア」www.itu.int。
- ^ 「Jpegliの紹介:新しいJPEGコーディングライブラリ」。Googleオープンソースブログ。2024年4月3日。2024年4月3日時点のオリジナルよりアーカイブ。2024年4月4日閲覧。
- ^ a b「libjpeg: API/ABI変更レビュー」 。 2017年10月28日閲覧。
- ^ a b Mans Rullgard (Hardwarebug.org)、2009年8月4日: IJGが復活Archived 2014-07-16 at the Wayback Machine
- ^ a b Lane, Tom (2013年1月16日). 「Libjpeg-turbo-users、jpeg-9、API/ABI互換性、そしてこのプロジェクトの将来的な役割」 . fedoraproject.org . 2014年1月3日時点のオリジナルよりアーカイブ。
- ^ Rullgard, Mans (2010年2月1日). 「IJGが再びスイング、そしてミス」 . Hardwarebug . 2024年12月10日時点のオリジナルよりアーカイブ。
- ^ 「ITU-T T.81(JPEG-1)ベースの代替算術符号化器を用いた静止画像符号化」(pdf)。2009年9月。
- ^ a b「libjpeg-turbo | 概要 / DCTスケーリングとSmartScaleの有用性に関する研究」。libjpeg -turbo.org。
- ^ ITU-T JPEG-Plus提案R3
- ^ JPEGの進化
- ^ JPEG 9 ロスレス符号化
- ^ “Libjpeg” . GitHub . 2021年10月6日.
- ^ 「リリース 3.1.3」 2025年12月10日. 2025年12月10日閲覧。
- ^ libjpeg-turbo を使用または提供するソフトウェア。2012年2月9日。
- ^問題48789 – chromium – libjpeg の代わりに libjpeg-turbo を使用してください。2011年4月14日。
- ^バグ 698519 – libjpeg-turbo 1.2 へのアップデート。2012年2月28日
- ^ F14用のlibjpeg。2012年2月9日。
- ^ libjpeg-turbo READMEファイル2018年12月14日Wayback Machineにアーカイブ
- ^ "リリース · mozilla/mozjpeg" . github.com . 2022年8月14日閲覧。
- ^ Andreas Donath (golem.de)、2014 年 3 月 6 日: Mozilla は JPEG をより強力に保存する予定です
- ^ Jpegli 変更ログ
- ^ 「Jpegliの紹介:新しいJPEGコーディングライブラリ」。Googleオープンソースブログ。2024年4月3日。2024年4月3日時点のオリジナルよりアーカイブ。2024年4月4日閲覧。
- ^ 「Jpeg - Jpeg Xt」。
外部リンク
- JPEGに関するよくある質問
- Nyman, Robert; Aas, Josh (2014年8月6日). 「MozJPEGを使った効率的なJPEGの作成」 . Hacks . Mozilla.