Image-Manipulation

jpegtran - 無損裁剪圖像的左側部分

  • May 31, 2021

我有一個 1400x1400 的圖像,我想在其中向左修剪 4 個像素,在底部修剪 1 個像素,為了保持正方形比例,從頂部修剪 3 個像素。問題是,每當我使用 進行裁剪時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和x4 之間,分別從右側移除 4-x 和 x 像素。x高於 5,顯然會報錯。我無法實現任何左修剪。誰能幫我?

我在 Arch Linux x86_64 系統上使用jpegtran1.4.2libjpeg-turbo版(內部版本 20151205)。

jpegtran不能以比最小編碼單元大小更精細的增量進行無損切割,這取決於通道和色度採樣模式。它將是 8×8、16×8 或 16×16。

這意味著最小剪切尺寸必須是 8 或 16 的偶數倍,具體取決於圖像的編碼方式。當圖像尺寸不是 8 或 16 像素的偶數倍時,右側和底部邊緣除外。在這種情況下,您在右側和/或底部邊緣有部分塊。例如,一個 17×17 像素的圖像可以從其右側或底部邊緣切割 1px,但不能從這些邊緣切割 2px,也不能從頂部和左側邊緣切割 1px。

其他任何事情都需要對剪切塊進行重新編碼。

引用手冊:

…無損裁剪受目前 JPEG 格式的限制:所選區域的左上角必須落在 iMCU 邊界上。如果這對於給定的裁剪參數不成立,我們默默地向上和/或向左移動左上角以使其如此,同時增加區域尺寸以保持右下角裁剪不變。(因此,輸出圖像至少覆蓋了請求的區域,但可能覆蓋更多。)

引用自:https://unix.stackexchange.com/questions/273097