Jef*_*ski 5 image-manipulation jpeg trim
我有一个 1400x1400 的图像,我想在其中向左修剪 4 个像素,在底部修剪 1 个像素,为了保持方形比例,从顶部修剪 3 个像素。问题是,每当我使用 进行裁剪时jpegtran
,无论我做什么,都会从右下角删除像素。例如,仅测试左侧部分,我尝试过:
jpegtran -perfect -crop 1396x1400+0+0 -outfile crop.jpg image.jpg
Run Code Online (Sandbox Code Playgroud)
但这只是从右侧删除了 4 个像素;
jpegtran -perfect -crop 1396x1400-4+0 -outfile crop.jpg image.jpg
Run Code Online (Sandbox Code Playgroud)
这再次从右侧删除了 4 个像素;
jpegtran -perfect -crop 1396x1400+4+0 -outfile crop.jpg image.jpg
Run Code Online (Sandbox Code Playgroud)
并且根本不会删除任何像素;更一般地说,
jpegtran -perfect -crop 1396x1400+x+0 -outfile crop.jpg image.jpg
jpegtran -perfect -crop 1396x1400-x+0 -outfile crop.jpg image.jpg
Run Code Online (Sandbox Code Playgroud)
用x
0和4之间,不会分别取出从右侧4-x和x个象素。凭借x
高于5,显然给出了一个错误。我无法实现任何左修剪。谁能帮我?
我使用的是jpegtran
从libjpeg-turbo
一个Arch Linux的x86_64的系统版本1.4.2(编译20151205)。
jpegtran
不能以比最小编码单元大小更精细的增量进行无损切割,这取决于通道和色度采样模式。它将是 8×8、16×8 或 16×16。
这意味着最小剪切尺寸必须是 8 或 16 的偶数倍,具体取决于图像的编码方式。当图像尺寸不是 8 或 16 像素的偶数倍时,右侧和底部边缘除外。在这种情况下,您在右侧和/或底部边缘有部分块。例如,一个 17×17 像素的图像可以从它的右边缘或底部边缘切掉 1px,但不能从这些边缘切掉 2px,也不能从上边缘和左边缘切掉 1px。
其他任何事情都需要对切割块进行重新编码。
引用手册:
...无损裁剪受当前 JPEG 格式的限制:所选区域的左上角必须落在 iMCU 边界上。如果这不适用于给定的裁剪参数,我们会默默地向上和/或向左移动左上角以使其如此,同时增加区域尺寸以保持右下角裁剪角不变。(因此,输出图像至少覆盖了请求的区域,但可能覆盖更多。)