¿Cómo fusionar imágenes en la línea de comandos? [cerrado]

111

Me gustaría probar la técnica CSS Sprite para cargar algunas miniaturas como una sola imagen. Así que necesito "fusionar" algunas miniaturas en un solo archivo sin conexión en el servidor.

Supongamos que tengo 10 miniaturas del mismo tamaño. ¿Cómo sugeriría que los "fusione" desde la línea de comandos de Linux?

Miguel
fuente

Respuestas:

198

También puede probar ImageMagic, que es excelente para crear sprites CSS. Algún tutorial al respecto aquí .

Ejemplo (sprite vertical):

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

Ejemplo (sprite horizontal):

convert image1.png image2.png image3.png +append result/result-sprite.png
Petr Mensik
fuente
45
Nota: Esto generará un sprite vertical, para uso de sprite horizontal en +appendlugar de -append.
Chango
13
Si eres vago,convert -append *.png out.png
ChillarAnand
Esto funciona, pero para archivos grandes lleva mucho tiempo. ¿Hay forma de composición rápida?
Vlad Tsepelev
@VladTsepelev Concatinar muchos PNGs significa decodificarlos (en un mapa de píxeles) para la operación y finalmente codificarlos nuevamente. Si desea extender un objeto existente con mucha frecuencia, entonces tal vez mantener las versiones decodificadas del mapa de píxeles puede acelerar las cosas. Vea mi respuesta para hacerlo usando las herramientas PNM para lograr esta operación. Pero, por supuesto, las versiones de mapa de píxeles son mucho más grandes que los PNG, así que espere usar más almacenamiento.
Alfe
1
Dice: ´convert-im6.q16: ancho o alto excede el límite `ktwo201121817-c102_lpd-targ.fits_autoaper.png '@ error / cache.c / OpenPixelCache / 3839.´
zabop
28

También puede usar GraphicsMagick , una bifurcación más ligera y rápida de ImageMagick:

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

Una simple comparación de tiempo de la fusión de 12 imágenes:

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 es casi el doble de rápido que ImageMagick.

tjanez
fuente
7

Utilice el pnmcatdel paquete netpbm.

Probablemente tenga que convertir sus archivos de entrada de un lado a otro para usarlo:

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

Si prefiere fusionar las imágenes de izquierda a derecha, use el siguiente comando:

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

Tenga +appenden cuenta el en lugar de -append.

abu_bua
fuente