Tengo una gran cantidad de archivos que tienen la imagen de una moneda sobre un fondo de fieltro negro. Usando ImageMagick puedo recortar automáticamente estas imágenes usando -trim y -fuzz.
La detección de bordes está funcionando bien, lo que me gustaría encontrar es un parámetro que me permita decir "encontrar el borde pero luego retroceder 10 píxeles", es decir, conservar un perímetro de 10 píxeles alrededor de la moneda en lugar de recortarla directamente. él. No deseo agregar un nuevo borde como con el comando -splice, sino conservar ese espacio de la imagen original.
Hasta ahora no he encontrado una manera de hacerlo, lo más parecido que se me ocurrió es ejecutarlo en modo -trim info:-, capturar el resultado y recalcular el recorte usando un recorte manual, pero realmente preferiría un proceso de un solo paso.
Estoy usando ImageMagick en Windows 10 y, aunque instalé las extensiones de bash, no he probado ningún script, por lo que sería preferible una solución que utilice únicamente la línea de comandos de Imagemagick.
Respuesta1
A falta de una solución elegante, opté por una que funcionara y escribí un script bash sencillo que parece funcionar bien. Esto deja un desplazamiento de 25 píxeles alrededor de la moneda utilizando el gráfico original para proporcionar el fondo. Eventualmente lo parametrizaré y lo limpiaré, pero es el script de trabajo de hoy.
for f in *.jpg; do
trimbox=$(convert $f -fuzz 25% -format "%@" info:)
orig=$trimbox
first=${trimbox%x*}
trimbox=${trimbox#*x}
second=${trimbox%%+*}
trimbox=${trimbox#*+}
third=${trimbox%+*}
fourth=${trimbox#*+}
#echo "trimbox: $orig first: $first second: $second third: $third fourth:$fourth"
((first+=50))
((second+=50))
((third-=25))
((fourth-=25))
trimbox=$first"x"$second"+"$third"+"$fourth
convert "$f" -crop "$trimbox" +repage "trimmed-$f"
done
Respuesta2
Puedes usar -border
y -bordercolor
para esto; por ejemplo, para un borde transparente, es posible que desees:
for f in *.jpg; do
convert -fuzz 25% -trim -border 25 -bordercolor none +repage $f trimmed-$f
done