正方形の比率を維持するために、左に4ピクセル、下に1ピクセル、上から3ピクセルを切り取る1400×1400の画像があります。問題は、を使用して切り取るたびjpegtran
に何をしても、右下隅からピクセルが削除されることです。たとえば、左側の部分のみをテストするには、次のようにします。
jpegtran -perfect -crop 1396x1400+0+0 -outfile crop.jpg image.jpg
ただし、これにより右から4ピクセルだけが削除されます。
jpegtran -perfect -crop 1396x1400-4+0 -outfile crop.jpg image.jpg
もう一度右から4ピクセルを削除します。
jpegtran -perfect -crop 1396x1400+4+0 -outfile crop.jpg image.jpg
通常、ピクセルはまったく削除されません。
jpegtran -perfect -crop 1396x1400+x+0 -outfile crop.jpg image.jpg
jpegtran -perfect -crop 1396x1400-x+0 -outfile crop.jpg image.jpg
0と4の間で、x
右からそれぞれ4-xとxピクセルを削除します。 5以上では、明らかにx
何かが間違っているでしょう。左トリミングはできません。誰が私を助けることができますか?
jpegtran
私はlibjpeg-turbo
Arch Linux x86_64システムでバージョン1.4.2(ビルド20151205)を使用しています。
答え1
jpegtran
比較できない最小コーディング単位チャンネルとチャンネルによってサイズが異なります。クロマサンプリングモード。 8×8、16×8、または16×16になります。
これは、画像符号化方法に応じて、最小カットサイズが8または16の偶数倍数でなければならないことを意味する。右端と下端を除いて、画像サイズが8または16ピクセルの偶数倍ではない場合。この場合、右端および/または下端に部分ブロックがあります。たとえば、17×17ピクセルの画像は、右端または下端から1ピクセルだけ切り取ることができますが、その端から2ピクセル、上端と左端から1ピクセルだけ切り取ることはできません。
他の作業では、切断されたブロックを記録する必要があります。
マニュアル引用:
...ロスレスカットは現在JPEG形式に制限されています。選択した領域の左上隅がiMCU境界になければなりません。指定されたトリミングパラメータにこれが適用されない場合は、これを達成するために左上隅を静かに上下左右に移動し、同時に右下トリミング角度を変更せずに維持するためにゾーンサイズを増やします。 (したがって、出力画像には少なくとも要求された領域が含まれますが、より多くの領域を含めることもできます。)
答え2
誰もがこのような状況に直面して16ピクセルの倍数でクリップしたい場合、すべての点で16ピクセルをクリップする形式は次のとおりです。
jpegtran -perfect -crop 1368x1368+16+16 -outfile crop.jpg image.jpg