imagemagick 转换:将修剪限制为最大 X 像素

imagemagick 转换:将修剪限制为最大 X 像素

使用 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

相关内容