Combina múltiples imágenes usando ImageMagick

166

Me gustaría combinar varias imágenes en una imagen usando ImageMagick. Para explicar un poco mejor, quiero que el resultado sea similar a esto:

Es decir, tengo varias capturas de pantalla, y quiero convertirlas en una imagen con las imágenes originales una encima de la otra.

Al buscar en Google, me he encontrado con el comando 'compuesto', pero no sé si, y en ese caso, cómo usarlo para obtener el resultado que quiero.

Petter
fuente
stackoverflow.com/questions/12076293/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

256

Para cualquier cantidad de archivos de entrada nombrados :in-<something>.jpg

convert -append in-*.jpg out.jpg

Para agregar archivos específicos u omitir números en lugar de obtener el "glob" completo, puede mencionar los archivos de entrada explícitamente y colocar el appendcomando después.

convertir in-1.jpg in-5.jpg in- N .jpg + agregar out-in1-plus-in5-and-in N .jpg

Puede usar -append(en lugar de +append) para pegar verticalmente.

O:

montage -mode concatenate -tile 1x in-*.jpg out.jpg

también creará un archivo out.jpgque contiene una concatenación vertical de las imágenes de origen.

convert

Para una concatenación simple en una sola fila o columna, la appendopción de la convertherramienta es suficiente. Tenga en cuenta que -appendconcatena todas las imágenes verticalmente, creando una columna con n filas, y +appendconcatena horizontalmente, creando una fila con n columnas.

(Consulte ImageMagick: Opciones de línea de comandos ).

montage

Para obtener un control más preciso sobre el diseño, necesitaríamos la montageherramienta. montage -mode concatenatepegará las imágenes de entrada juntas como la appendopción y -tile 1xcontrolará el diseño que se aplicará.

tilesigue las columnas de formato × filas , pero puede faltar cualquiera de los lados y montagedescubrirá cómo cumplir con las restricciones.

Estamos usando 1x(exactamente una columna con cualquier número de filas) aquí para obtener el mismo efecto que -append. Sin -tile 1x, se uniría a las imágenes como +append, por defecto -tile x1(cualquier número de columnas en una fila).

(Consulte los ejemplos de ImageMagick: montaje, matrices de imágenes ).

peth
fuente
1
Gracias. append funciona bien, pero considero que el montaje está roto: si las fuentes ghostscript no están instaladas, se rescatará, INCLUSO si no está anotando las imágenes. Las fuentes se deben cargar a pedido, no con anticipación.
Bram
@Bram: No lo sabía y estoy totalmente de acuerdo. ¿Sabes si GraphicsMagick se comporta igual?
peth
2
@MikeRobinson convert -append `counter=0; for x in in-*; do if [[ $(($counter % 2)) == 0 ]]; then echo $x; fi; counter=$((counter + 1)); done` out.jpgdebería hacer el trabajo.
gozzilli
2
Tenga en cuenta que el convert -tile 2x2comando etc. leerá los archivos alfabéticamente . Esto significa que los fragmentos nombrados 0-10se leerán como 0,10,1,2,..,9. Me llevó casi 2 horas darme cuenta de algo tan básico.
phil294
1
@Blauhirn: ¿Es esa conversión clasificando los nombres de los archivos, o es solo tu glob devolviendo archivos en ese orden? por ejemplo ls *, devolverá esos valores en ese orden.
nada101