Jak scalać obrazy w linii poleceń? [Zamknięte]

111

Chciałbym wypróbować technikę CSS Sprite , aby załadować kilka miniatur jako pojedynczy obraz. Muszę więc „scalić” kilka miniatur w jednym pliku offline na serwerze.

Załóżmy, że mam 10 miniatur tego samego rozmiaru. Jak sugerowałbyś „scalenie” ich z wiersza poleceń Linuksa?

Michael
źródło

Odpowiedzi:

198

Możesz także wypróbować ImageMagic, który jest świetny do tworzenia sprite'ów CSS. Tutaj znajdziesz tutorial na ten temat .

Przykład (sprite pionowy):

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

Przykład (sprite poziomy):

convert image1.png image2.png image3.png +append result/result-sprite.png
Petr Mensik
źródło
45
Uwaga: Spowoduje to wygenerowanie pionowego duszka, który będzie używany w poziomie +appendzamiast -append.
Chango,
13
Jeśli jesteś leniwy,convert -append *.png out.png
ChillarAnand
To działa, ale w przypadku dużych plików zajmuje dużo czasu. Czy jest sposób na szybkie komponowanie?
Vlad Tsepelev
@VladTsepelev Łączenie wielu plików PNG oznacza dekodowanie ich (do piksmapy) na potrzeby operacji i ponowne kodowanie. Jeśli chcesz często rozszerzać istniejący sprite, być może zachowanie zdekodowanych wersji pixmap może przyspieszyć działanie. Zobacz moją odpowiedź dotyczącą robienia tego za pomocą narzędzi PNM w celu wykonania tej operacji. Ale oczywiście wersje pixmap są znacznie większe niż PNG, więc spodziewaj się, że wykorzystasz więcej miejsca.
Alfe
1
Mówi: ´convert-im6.q16: szerokość lub wysokość przekracza limit `ktwo201121817-c102_lpd-targ.fits_autoaper.png '@ error / cache.c / OpenPixelCache / 3839.´
zabop
28

Możesz także użyć GraphicsMagick , lżejszego i szybszego rozwidlenia ImageMagick:

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

Proste porównanie czasu łączenia 12 obrazów:

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 jest prawie dwa razy szybszy niż ImageMagick.

tjanez
źródło
7

Użyj pnmcatpakietu netpbm.

Prawdopodobnie będziesz musiał przekonwertować swoje pliki wejściowe do i z powrotem, aby go używać:

pnmcat -lr <(pngtopnm 1.png) <(pngtopnm 2.png) | pnmtopng > all.png
Alfe
źródło
4

Jeśli wolisz scalać obrazy od lewej do prawej, użyj następującego polecenia:

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

Zwróć uwagę na +appendzamiast -append.

abu_bua
źródło