Como inserir espaços em branco com o imagemagick?

15

Quais parâmetros o "converter" (?) Precisa para obter essa SAÍDA desta ENTRADA?

ENTRADA:

insira a descrição da imagem aqui

RESULTADO:

insira a descrição da imagem aqui

gasko peter
fonte

Respostas:

8

Como não queria que as imagens estivessem niveladas com o lado direito, tive que usar uma abordagem diferente ( compositeferramenta do ImageMagick ):

convert -size 500x500 xc:white canvas.png
convert canvas.png in.png -geometry +200+200 -composite out.png

-sizedeve ser o tamanho final da imagem que você deseja, canvas.pngé uma tela branca em branco, in.pngseria a imagem que você deseja preencher e -geometryé o deslocamento do posicionamento.

mustafa.0x
fonte
15

Minha versão do ImageMagick é '6.7.8-0-04-07-07 Q16'. De acordo com o documento, a resposta do comando @kev deve funcionar:

 convert in.png -gravity east -extent 520x352 out.png

No entanto, como na maioria das perguntas do ImageMagick, você pode atingir o mesmo objetivo com diferentes meios. Você poderia usar montageassim:

 montage null: in.png -tile 2x1 -geometry +17+0 out1.png

Isso usa a imagem especial 'null:' para concatená-la com o in.png.


É verdade que convertvocê precisa recalcular os valores que precisa passar -extentpara cada imagem de entrada com tamanho diferente.

Primeiro use identify -formatpara obter as dimensões da imagem:

 identify -format '%Wx%H' in.png

Isso deve retornar algo como:

 449x352

Ok, agora você precisaria adicionar os 71 pixels desejados para obter o 520x352valor final . Mas você não precisa fazer esse cálculo em seu próprio cérebro:

ImageMagick para o resgate !, e seus recursos de cálculo mágico ... :-)

Você pode dizer ao identify -formatcomando para fazer esse cálculo para você:

 identify -format '%[fx:W+71]x%H'

Agora, você deve obter um resultado de:

 520x352

Supondo que você queira apenas adicionar / adicionar uma 'faixa branca' de 71 pixels de largura à esquerda de qualquer imagem, você pode usar a seguinte linha de comando única:

 convert \
    in.png \
   -gravity east \
   -background white \
   -extent $(identify -format '%[fx:W+71]x%H' in.png) \
    out2.png

Voila! Uma linha de comando (que encapsula 2 comandos, para ser honesto) e você pode soltá-la em todos os seus PNGs, JPEGs, GIFs, ... em um diretório para adicionar automaticamente sua faixa branca de 71pixels a cada um deles:

 for i in *.png *.jpeg *jpg *.gif; do
    convert \
       ${i} \
      -gravity east \
      -background white \
      -extent $(identify -format '%[fx:W+71]x%H' ${i}) \
       $(convert ${i} -format "71-pixels-padded-left---%t.%e" info:)
 done

Para cada imagem, sua saída permanece o mesmo tipo de arquivo. É claro que você pode fazer com que toda saída seja PNG (ou o que você quiser). Apenas substitua a %t.%eparte do comando por %t.png...

Kurt Pfeifle
fonte
8

Documentação: http://www.imagemagick.org/Usage/crop/#extent

convert in.png -gravity east -extent 500x352 out.png
kev
fonte
Obrigado!! Mas e se minha foto não for 500x352 - porque o tamanho varia?
Gasko peter
1
Eu apenas mostro como.
Jul12
@ kev: Seu comando não faz exatamente o que @gasko peter queria. Você deveria ter usado -extend 520x352. +1 para a "direção certa":
Kurt Pfeifle
sed 's # -extend # -extent # g'
Kurt Pfeifle
Eu tive que adicionar -background transparentpara preservar um fundo transparente.
tremby
0

Eu tenho esse comando definido no meu .bash_profile. Ele calculará automaticamente o tamanho final da imagem a partir do preenchimento desejado em largura e altura (funciona com zeros):

# arithmetic with awk
calc() { awk "BEGIN { print $* }"; }

# pad an image
img_pad() {
    local width height pw ph 
    [ $# -lt 3 ] && { echo "Usage: img_pad <Input> <WxH> <Output>"; return; }

    # parse current size and padding
    IFS=x read width height <<< "$(identify "$1" | awk '{print $3}')"
    IFS=x read pw ph <<< "$2"

    # new widht and height
    width=$(calc "$width + 2*$pw")
    height=$(calc "$height + 2*$ph")

    echo "Converting '$1' to '$3' with size ${width}x${height} (+w=${pw}, +h=${ph})."
    convert "$1" -gravity center -extent "${width}x${height}" "$3"
}

Exemplo de uso:

# pad 50px left and right, no vertical padding
img_pad in.png 50x0 out.png 
Jonathan H
fonte