使用 ImageMagick(debian stable 上的 6.9.11-60),我想剃去扫描页面(jpg 或 TIFF)左右 24px,但前提是该区域实际上是“空的”(即大部分是白色) 。
我会使用-shave
,但是即使该区域不是白色,也会删除像素。
然后我想到-trim
但我不知道如何将其限制为最大 24px。
问题:如何删除扫描图像的左右 24px,但是仅当该区域为空时?
我愿意不使用 IM,这正是我首先想到的。
答案1
我不是 ImageMagick 专家,因此无法提供一句话,但您可以做的是运行-trim
,然后查看结果。如果输出 png,那么它会保存有关新图像在原始图像中的来源的信息,即帆布(即使它是 jpg)。您可以使用identify
提取结果图像的 x 偏移和宽度,并检查这是否超过您想要修剪的 24 个像素。您可以选择添加例如,-fuzz 10%
以使修剪接受的不仅仅是白色像素。显然,如果您决定进行修剪,则可以使用-shave
并输出 jpg。这是使用内置图像的示例:
check(){
origwidth=$(convert out.png -format "%W" info:)
left=$( convert out.png -format "%X" info:)
width=$( convert out.png -format "%w" info:)
let right=origwidth-left-width
if [ "$left" -lt 24 -a "$right" -lt 24 ]
then echo "trim ok"
else echo "dont trim"
fi
}
convert rose: -resize 160x160 inset.jpg
convert granite: -resize 200x200 bg.jpg
composite inset.jpg -geometry +20+20 bg.jpg input.jpg
convert input.jpg -fuzz 10% -trim out.png
check
composite inset.jpg -geometry +30+20 bg.jpg input.jpg
convert input.jpg -fuzz 10% -trim out.png
check