640x480 の JPEG 画像を 320x240 に変換したいです。JPEG 画像を生の YCbCr にデコードし、拡大縮小して JPEG に再エンコードすることで実行できることはわかっています。しかし、JPEG エンコードではデコードせずに画像を直接拡大縮小することは可能でしょうか?
答え1
可能ですが、JPEGビューアがサポートしている場合に限ります。スマートスケールJPEG 拡張子。jpegトランN/8 のサイズ (N=1..16) に対してこれを実行できます。基本的に、DCT ブロック サイズは再圧縮中に 8x8 から別のサイズ (たとえば 4x4) に変更され、これにより画像が効果的に拡大縮小されます。
注: SmartScaleはバージョン 8libjpeg ライブラリですが、ビューアでは広くサポートされていません。
変更の詳細を説明した文書は、こちらからご覧いただけます:JPEGの進化。
編集:これらの画像はlibjpeg-turboに基づいているため、ほとんどのビューアでは実際に表示できないようです。そしてlibjpeg-turboこの機能を実装しないことを選択した実際、私はかなりの数のプログラム (Ubuntu 14.04 および Windows 8) を試しましたが、jpegtrans を使用して作成された縮小された画像を表示できるプログラムはありませんでした。Photoshop、IrfanView、GIMP でも失敗しました。
編集2:実際、Ubuntu と Fedora は libjpeg8 ライブラリを同梱しておらず、libjpeg-turbo バージョンに完全に置き換えています。そのため、オリジナルの libjpeg8 ライブラリに静的にリンクされているいくつかのバイナリを除き、どのプログラムも JPEG SmartScale ファイルを読み取ることができません。
答え2
簡単に答えると、いいえです。JPEG イメージは圧縮を使用するため、各出力バイトは他のすべてのバイトに依存します。イメージのバイト数を変更する場合は、解凍して再圧縮する必要があります。
JPEG は非可逆圧縮を使用するため、再圧縮の結果、品質が低下しますが、解像度を 4 分の 1 にすることで、いずれにしても品質が低下します。再圧縮時に JPEG 品質レベルを上げると、低解像度の画像から可能な限り最高の品質を得ることができますが、当然、ファイル サイズは大きくなります。
画像を扱う作業が多い場合は、PNG などのロスレス圧縮形式で作業し、画像が完成した時点で JPEG に変換するのが最適です (もちろん、ディスクに余裕がある場合)。