Como altero o tamanho da tela de um PNG com ImageMagick (GraphicsMagick)? (Como preencher com transparência?)

9

Como alternativa: como pego um PNG não quadrado e "preenche" o "restante" da imagem com transparência, para que a imagem quadrada resultante tenha a imagem original centralizada no quadrado?

FINALMENTE, o que eu quero é tirar qualquer imagem de qualquer formato suportado pela GM, de qualquer tamanho, e criar um PNG em escala reduzida (digamos, 40 pixels no máximo para qualquer dimensão), com a proporção de aspecto mantida, com transparência para não quadrado. imagens originais E com uma máscara de transparência 40x40 PNG já preparada aplicada.

Eu já sei como reduzir e manter a proporção; Eu já tenho o comando para aplicar meu composto. Minha única peça que falta é o tamanho quadrado de imagens não quadradas (preenchimento com transparência).

Comando único preferido; cadeia de multi-comando aceitável.

(editar)

Informações adicionais: Aqui está o comando composto que estou usando:

gm composite -compose copyopacity mask.png source-and-target.png source-and-target.png

onde mask.png tem pixels brancos para o que eu quero manter de source-and-target.png e pixels transparentes para o que eu quero remover (e tornar-se transparente) do source-and-target.png.

Pistos
fonte

Respostas:

7

Este comando aceita qualquer arquivo de entrada de tamanho e o ajusta melhor a um quadrado de 40x40 e a uma almofada com transparência:

convert \
   original.png \
  -thumbnail '40x40>' \
  -background transparent \
  -gravity center \
  -extent 40x40 \
  -compose Copy_Opacity \
  -composite mask.png \
   original-resized.png

A gravityopção garante que a imagem esteja centralizada nas duas direções e transparentseja usada sempre que não houver pixels. Em seguida, a composição é feita com omask.png

Paulo
fonte
Então não podemos fazer isso de uma só vez composite?
Pistos
@Pistos Não sei ao certo o que você está fazendo com o composto - é apenas uma máscara de transparência para ocultar / mostrar partes da miniatura após o redimensionamento? Você pode editar e adicionar a sequência de comandos que você tem até agora, para que possamos ver se ela pode ser combinada?
Paul
@Pistos Acho que a melhor abordagem é fazer a composição com -convert, e não o contrário. Eu atualizei minha resposta acima.
Paul
Perto, mas não exatamente. Seu comando não funcionou como está e, mesmo com ajustes, não funcionou. Está tudo bem, eu vou fazer isso em duas etapas. Atualizarei as coisas aqui depois de receber as etapas finais da CLI em funcionamento. Obrigado novamente.
Pistos
Eu acrescentaria -filter Catromantes da thumbnailopção porque, pela minha experiência, geralmente produz imagens de qualidade superior.
Thdan
6

Um comando para converter todos os PNGs de uma pasta:

mogrify \
 -resize 50x50 \
 -background transparent \
 -gravity center \
 -extent 50x50 \
 -format png \
 -path resized \
 *.png

mogrify é um comando do pacote ImageMagick. Você deve criar o diretório de saída primeiro.

uı6ʎɹnɯ ꞁəıuɐp
fonte
Agradável. BTW, se você se sentir aventureiro, poderá omitir -path resizeda edição dos arquivos no local.
aaronk6
Isso é ótimo. Na minha instalação (OSX, 1.3.35) é gm mogrifye, em vez de -path resized, use-create-directories -output-directory resized
Blake
1

Aqui está o que eu acabei escolhendo. Um processo de duas etapas:

gm convert \
  -thumbnail '40x40>' \
  -background transparent \
  -gravity center \
  -extent 40x40 \
   original.png \
   intermediate.png

gm composite \
  -compose in \
   intermediate.png \
   mask.png \
   out.png

Onde mask.png são pixels brancos para o que eu queria manter e pixels transparentes para o que eu queria mascarar (descartar).

Pistos
fonte