Como mesclar imagens na linha de comando? [fechadas]

111

Eu gostaria de tentar a técnica CSS Sprite para carregar algumas miniaturas como uma única imagem. Portanto, preciso "mesclar" algumas miniaturas em um único arquivo offline no servidor.

Suponha que eu tenha 10 miniaturas do mesmo tamanho. Como você sugere que eu os "mescle" na linha de comando do Linux?

Michael
fonte

Respostas:

198

Você também pode experimentar o ImageMagic, que é ótimo para criar sprites CSS. Algum tutorial sobre isso aqui .

Exemplo (sprite vertical):

convert image1.png image2.png image3.png -append result/result-sprite.png

Exemplo (sprite horizontal):

convert image1.png image2.png image3.png +append result/result-sprite.png
Petr Mensik
fonte
45
Nota: Isso irá gerar um sprite vertical, para uso +appendem sprite horizontal ao invés de -append.
Chango
13
Se você for preguiçoso,convert -append *.png out.png
ChillarAnand
Isso funciona, mas para arquivos grandes leva muito tempo. EXISTE maneira de composição rápida?
Vlad Tsepelev
@VladTsepelev Concatinando muitos PNGs significa decodificá-los (para um pixmap) para a operação e finalmente codificá-los novamente. Se você deseja estender um sprite existente com frequência, talvez manter as versões de pixmap decodificadas possa acelerar as coisas. Veja minha resposta por fazer isso usando as ferramentas do PNM para conseguir essa operação. Mas é claro que as versões de pixmap são muito maiores do que os PNGs, então espere usar mais armazenamento.
Alfe
1
Diz: ´convert-im6.q16: largura ou altura excede o limite `ktwo201121817-c102_lpd-targ.fits_autoaper.png '@ error / cache.c / OpenPixelCache / 3839.´
zabop
28

Você também pode usar o GraphicsMagick , um fork mais leve e rápido do ImageMagick:

gm convert image1.png image2.png -append combined.png

Uma comparação de tempo simples da fusão de 12 imagens:

time convert image{1..12}.jpg -append test.jpg

real    0m3.178s
user    0m3.850s
sys     0m0.376s

time gm convert image{1..12}.jpg -append test.jpg

real    0m1.912s
user    0m2.198s
sys     0m0.766s

GraphicsMagick é quase duas vezes mais rápido que ImageMagick.

Tjanez
fonte
7

Use o pnmcatdo pacote netpbm.

Você provavelmente terá que converter seus arquivos de entrada para frente e para trás para usá-lo:

pnmcat -lr <(pngtopnm 1.png) <(pngtopnm 2.png) | pnmtopng > all.png
Alfe
fonte
4

Se você preferir mesclar as imagens da esquerda para a direita, use o seguinte comando:

convert image{1..0}.png +append result/result-sprite.png

Observe o em +appendvez de -append.

abu_bua
fonte