jpegtran - 无损裁剪图像的左侧部分

jpegtran - 无损裁剪图像的左侧部分

我有一个 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

介于x0 和 4 之间,分别从右侧删除 4-x 和 x 像素。高于x5,显然会出错。我无法实现任何左侧修剪。谁能帮我?

jpegtran我在libjpeg-turboArch 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

相关内容