我在Windows 10中的命令行Ubuntu终端上运行Imagemagick
- 使用Windows 10中的内置工具 - Ubuntu App。
我是一个完整的Linux新手但在上述环境中安装了imagemagick
。
我的任务 - 自动移除黑色(ish)边框,并对数千张扫描的35毫米幻灯片的图像进行校正。
我可以成功运行
等命令mogrify -fuzz 35% -deskew 80% -trim +repage *.tif
问题是: -
所以我想要做的就是两次通过,不同的模糊%,原因如下: -
这样,错误很少,所有图像都会被正确修剪。
所以问题 - 如何调整命令行以进行2次传递,并在第二次传递时忽略较小的文件大小?
我有一种可怕的感觉,答案将是一个剧本。我不知道如何构建或设置Ubuntu来运行它,所以如果是这样的话,请你指点我也帮助!!
答案 0 :(得分:1)
在ImageMagick中,您可以执行以下操作:
获取输入文件大小
Use convert to deskew and trim.
Then find the new file
Then compare the new to the old to compute the percentdifference to some percent threshold
If the percent difference is less than some threshold, then the processing did not trim enough
So reprocess with a higher fuzz value and write over the input; otherwise keep the first one only and do not write over the old one.
Unix语法。
选择两个模糊值
选择百分比变化阈值
创建一个新的空目录来保存输出(结果)
cd
cd desktop/Originals
fuzz1=20
fuzz2=40
threshpct=10
list=`ls`
for img in $list; do
filesize=`convert -ping $img -precision 16 -format "%b" info: | sed 's/[B]*$//'`
echo "filesize=$filesize"
convert $img -background black -deskew 40% -fuzz $fuzz1% ../results/$img
newfilesize=`convert -ping ../results/$img -precision 16 -format "%b" info: | sed 's/[B]*$//'`
test=`convert xc: -format "%[fx:100*($filesize-$newfilesize)/$filesize<$threshpct?1:0]" info:`
echo "newfilesize=$newfilesize; test=$test;"
[ $test -eq 1 ] && convert $img -background black -deskew 40% -fuzz $fuzz2% ../results/$img
done
问题是你需要确保为输出设置输出的TIFF压缩与输入相同,这样文件大小是相同的,并且可能是新的大小不比JPG那样大。
请注意,sed用于从文件大小中删除字母B(字节),因此可以将它们作为数字而不是字符串进行比较。 -precision 16强制“%b”报告为B而不是KB或MB。