Как объединить изображения в командной строке? [закрыто]

111

Я хотел бы попробовать технику CSS Sprite , чтобы загрузить несколько эскизов как одно изображение. Поэтому мне нужно «объединить» несколько эскизов в один файл в автономном режиме на сервере.

Предположим, у меня есть 10 эскизов одинакового размера. Как вы посоветуете «объединить» их из командной строки Linux?

Майкл
источник

Ответы:

198

Вы также можете попробовать ImageMagic, который отлично подходит для создания спрайтов CSS. Некоторый учебник об этом здесь .

Пример (вертикальный спрайт):

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

Пример (горизонтальный спрайт):

convert image1.png image2.png image3.png +append result/result-sprite.png
Петр Менсик
источник
45
Примечание: это создаст вертикальный спрайт для использования горизонтального спрайта +appendвместо -append.
Chango
13
Если вы ленивы,convert -append *.png out.png
ChillarAnand
Это работает, но для больших файлов требуется много времени. Есть ли способ быстрого композитинга?
Влад Цепелев
@VladTsepelev Объединение множества PNG означает их декодирование (в растровое изображение) для операции и, наконец, их повторное кодирование. Если вы хотите очень часто расширять существующий спрайт, возможно, сохранение декодированных версий растровых изображений может ускорить процесс. См. Мой ответ, как это сделать с помощью инструментов PNM для выполнения этой операции. Но, конечно, версии растровых изображений намного больше, чем PNG, поэтому ожидайте использования большего объема памяти.
Alfe
1
Он говорит: «convert-im6.q16: ширина или высота превышает предел «ktwo201121817-c102_lpd-targ.fits_autoaper.png '@ error / cache.c / OpenPixelCache / 3839.»
zabop
28

Вы также можете использовать GraphicsMagick , более легкий и быстрый форк ImageMagick:

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

Простое сравнение времени объединения 12 изображений:

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 почти в два раза быстрее ImageMagick.

tjanez
источник
7

Используйте pnmcatфайл netpbm-package.

Вам, вероятно, придется конвертировать ваши входные файлы туда и сюда, чтобы использовать его:

pnmcat -lr <(pngtopnm 1.png) <(pngtopnm 2.png) | pnmtopng > all.png
Alfe
источник
4

Если вы предпочитаете объединять изображения слева направо, используйте следующую команду:

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

Обратите внимание на +appendвместо -append.

abu_bua
источник