Como redimensionar automaticamente com o Imagemagick, mantendo uma borda pequena?

0

Eu tenho um grande número de arquivos que têm uma imagem de uma moeda em um fundo de feltro preto. Usando o ImageMagick, eu posso auto-ajustar essas imagens usando -trim e -fuzz.

A detecção de bordas está funcionando bem, o que eu gostaria de encontrar é um parâmetro que me permite dizer "encontre a borda mas depois faça o backup de 10 pixels", ou seja, retenha um perímetro de 10 pixels ao redor da moeda cortando direito contra ele. Eu não desejo adicionar uma nova borda como com o comando -splice, mas manter esse espaçamento da imagem original.

Até agora eu não encontrei uma maneira de fazê-lo, o mais próximo que eu cheguei é rodar em info -trim: - modo, capturar a saída e recalcular a cultura usando um corte manual, mas eu Eu prefiro um processo de um passo.

Estou usando o ImageMagick no Windows 10 e, embora eu tenha instalado as extensões do bash, não testei nenhum script sob ele, portanto, uma solução que use apenas a linha de comando do Imagemagick seria a preferida.

    
por Stephen 17.09.2016 / 23:07

2 respostas

0

Por falta de uma solução elegante eu fui com um trabalho e escreveu um script bash bruto que parece fazer o trabalho muito bem. Isso deixa um deslocamento de 25 pixels ao redor da moeda usando o gráfico original para fornecer o plano de fundo. Eventualmente, vou parametrizar isso e limpar isso, mas é o script de trabalho de hoje.

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
    
por 19.09.2016 / 05:12
0

Você pode usar -border e -bordercolor para isso. para uma borda transparente, você pode querer:

for f in *.jpg; do
  convert -fuzz 25% -trim -border 25 -bordercolor none +repage $f trimmed-$f
done

Veja o link

    
por 22.06.2017 / 07:20