JPEG画像は8×8ピクセルのブロックに圧縮されているため、JPEGの幅や高さが8で割られていない場合は、外側の端から1〜7ピクセルを削除することは技術的に可能ですか?ロスレス?
(または内部8x8ブロックが損傷しない限り、外側のエッジを目的のサイズに切ります。)
答え1
に基づいてjpegtran
マニュアルページ(そしてウィキペディア)、JPEG画像の左上隅は8×8ブロックの角にある必要があるため、単一のピクセル行/列がJPEG画像から切り取ることができます。一番下そして正しいエッジですがいいえ~から左またはトップ。もちろん、左と上から8x8ブロック全体を切り取ることも可能です。
マニュアルページ-crop
では、次のコマンドでこれについて説明します。
回転および反転変換と同様に、ロスレスカットは現在のJPEG形式に制限されています。選択した領域の左上隅はiMCU境界になければなりません。それ以外の場合は、最も近いiMCU境界に自動的に上下左右に移動します(右下隅は変更されていません)。
答え2
JPEG画像の上端と左端は常にブロック境界にあります。下端と右端はそうであってもなくてもよい。
したがって、ロスレスカットされた画像の下端と右端を自由に選択できますが、トリミングされた画像の上端と左端は元の上端と左端の有効ブロックサイズの整数倍でなければなりません。
JPEG画像の有効ブロックサイズはさまざまです。 DCTは8x8ブロックで動作しますが、一部のJPEGはクロマサブサンプリングを実行して有効ブロックサイズを8x16または16x16にします。