Comment fusionner des images en ligne de commande? [fermé]

111

Je voudrais essayer la technique CSS Sprite pour charger quelques vignettes en une seule image. J'ai donc besoin de "fusionner" quelques vignettes dans un seul fichier hors ligne sur le serveur.

Supposons que j'ai 10 vignettes de la même taille. Comment suggéreriez-vous que je les "fusionne" à partir de la ligne de commande Linux?

Michael
la source

Réponses:

198

Vous pouvez également essayer ImageMagic qui est idéal pour créer des sprites CSS. Quelques tutoriels à ce sujet ici .

Exemple (sprite vertical):

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

Exemple (sprite horizontal):

convert image1.png image2.png image3.png +append result/result-sprite.png
Petr Mensik
la source
45
Remarque: Cela générera un sprite vertical, pour une utilisation horizontale +appendau lieu de -append.
Chango
13
Si vous êtes paresseux,convert -append *.png out.png
ChillarAnand
Cela fonctionne, mais pour les fichiers volumineux, cela prend beaucoup de temps. Y a-t-il moyen de composer rapidement?
Vlad Tsepelev
@VladTsepelev Concentrer beaucoup de PNG signifie les décoder (en une pixmap) pour l'opération et enfin les encoder à nouveau. Si vous souhaitez étendre très souvent un sprite existant, alors peut-être que conserver les versions de pixmap décodées peut accélérer les choses. Voir ma réponse pour le faire en utilisant les outils PNM pour réaliser cette opération. Mais bien sûr, les versions de pixmap sont bien plus grandes que les PNG, alors attendez-vous à utiliser plus de stockage.
Alfe
1
Il dit: ´convert-im6.q16: la largeur ou la hauteur dépasse la limite `ktwo201121817-c102_lpd-targ.fits_autoaper.png '@ error / cache.c / OpenPixelCache / 3839.´
zabop
28

Vous pouvez également utiliser GraphicsMagick , un fork plus léger et plus rapide d'ImageMagick:

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

Une simple comparaison temporelle de la fusion de 12 images:

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 est presque deux fois plus rapide qu'ImageMagick.

Tjanez
la source
7

Utilisez le pnmcat package netpbm.

Vous devez probablement convertir vos fichiers d'entrée pour l'utiliser:

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

Si vous préférez fusionner les images de gauche à droite, utilisez la commande suivante:

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

Notez le +appendau lieu de -append.

abu_bua
la source