JPEG画像のサイズを、デコードおよび再エンコードなしで変更できますか?


12

640x480 JPEG画像を320x240に変換したい。JPEG画像を生のYCbCrにデコードし、スケーリングし、JPEGに再エンコードすることで実現できることを知っています。しかし、JPEGエンコーディングを使用すると、デコードせずに画像を直接スケーリングできますか?

回答:


14

ただし、JPEGビューアーがSmartScale JPEG拡張をサポートしている場合のみ可能です。jpegtranは、N / 8のサイズ(N = 1..16)でこれを行うことができます。基本的に、DCTブロックサイズは再圧縮中に8x8から他のサイズ(4x4など)に変更され、画像を効果的にスケーリングします。

注:SmartScaleはlibjpegライブラリのバージョン8で導入されましたが、視聴者によって広くサポートされていません。

変更の詳細を説明するドキュメントは、JPEGの進化にあります

編集:ほとんどの視聴者は、libjpeg-turboに基づいているため、これらの画像を実際に表示できないようです。また、libjpeg-turbo はこの機能を実装しないことを選択しました。実際、かなりの数のプログラム(Ubuntu 14.04およびWindows 8)を試しましたが、jpegtransを使用して作成された縮小画像を表示することはできませんでした。Photoshop、IrfanView、GIMPでさえ失敗しました。

編集2:実際には、UbuntuとFedoraはlibjpeg8ライブラリも出荷していませんが、libjpeg-turboバージョンに完全に置き換えています。そのため、どのプログラムもJPEG SmartScaleファイルを読み取れず、元のlibjpeg8ライブラリに静的にリンクされているいくつかのバイナリを保存できません。


画像にデータを追加するだけで成長する画像を構築するコーデックはありますか?
ネックウィ14

プログレッシブjpegはどうですか?それはまさに私が求めていることをしませんか?
ネックウィ14

いいえ、画像の品質を(低から全に)上げることで少し異なりますが、解像度は常に変更されません(reference)。ただし、「階層モード」と呼ばれる別のJPEG拡張機能があり、さまざまな解像度をエンコードします(こちらも参照)。しかし、繰り返しますが、libjpeg-turboはこれをサポートしていません(ここを参照、本文で「プログレッシブ」を検索してください)。
jmiserez 14

1
そして、最初のコメントに答えるために、もちろんそのようなコーデックがあります。JPGではありません。探しているものは、イメージピラミッド、またはマルチスケール表現と呼ばれます。たとえば、JPEG2000は、ウェーブレットピラミッドを作成するウェーブレット変換を使用します。ガウスピラミッドやラプラシアンピラミッドなど、他のピラミッドがあります。このスライドセットは、物事がどのように機能するかについての良い概要を提供しますが、JPEG2000はここここで議論さます
jmiserez 14

新しいJPEG形式に関する情報をありがとう。多くのソース画像(カメラ、スキャナーなど)がまだそれらを使用することを期待していません。
AFH

3

短い答えはノーです。JPEGイメージは圧縮を使用します。つまり、各出力バイトは他のすべてのバイトに依存します。イメージのバイト数を変更する場合は、圧縮解除および再圧縮する必要があります。

JPEGは非可逆圧縮を使用するため、再圧縮の結果として品質が低下しますが、解像度を4分の1にすると品質が低下します。再圧縮時にJPEGの品質レベルを上げると、低解像度の画像から可能な限り最高の品質を得ることができますが、これによりファイルサイズが大きくなります。

画像で多くの作業を行う場合、PNGなどのロスレス圧縮形式で作業することをお勧めします。もちろん、余分なディスク容量がある場合は、画像が完成したときにのみJPEGに変換します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.