es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Superponer varias imágenes PNG de diferentes tamaños en un lienzo utilizando ImageMagick.

Quiero superponer múltiples imágenes PNG de diferentes tamaños en un lienzo transparente utilizando ImageMagick. Primero creo un lienzo transparente de un tamaño fijo, por ejemplo:

convert -size 1500x1000 canvas:transparent PNG32:canvas.png

Luego hago un bucle sobre mis imágenes para agregar cada imagen al lienzo:

convert canvas.png nthimage.png -gravity Center -geometry xResxYres+xcoord+ycoord -composite canvas.png

Esto funciona bien, pero puedo superponer hasta 10 imágenes y hago esto para miles de n-tuplas de imágenes, por lo que se agradecería una solución más rápida. Entonces mi pregunta: ¿También puedo hacer esto en un solo paso en lugar de crear primero el lienzo y luego agregar una sola imagen a la vez?

Editar: Utilizo ImageMagick 7.0.11-13 en macOS 10.15.7. Ejecuto ImageMagick desde un script de python, por lo que se puede generar un archivo que contenga una lista de archivos de entrada si es necesario. Para ser concretos, digamos que mis archivos de entrada son file_1.png hasta file_n.png con tamaños A1xB1 hasta AnxBn y deben colocarse en las coordenadas +X1+Y1 hasta +Xn+Yn con respecto al centro del lienzo y el archivo de salida es output.png y debe tener un tamaño de 1500×1000.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible superponer múltiples imágenes PNG en un lienzo transparente en un solo paso utilizando ImageMagick. Aquí tienes un ejemplo de comando:

    convert -size 1500x1000 xc:transparent \
    \( file_1.png -background none -gravity center -geometry +X1+Y1 -extent A1xB1 \) \
    \( file_2.png -background none -gravity center -geometry +X2+Y2 -extent A2xB2 \) \
    ... \
    \( file_n.png -background none -gravity center -geometry +Xn+Yn -extent AnxBn \) \
    -layers merge output.png
    

    Explicación:

    • El primer comando crea un lienzo transparente utilizando xc:transparent y establece el tamaño en 1500×1000.
    • Los comandos \( \) en paréntesis siguientes especifican cada imagen a superponer, así como la posición y el tamaño. -background none especifica que el fondo debe ser transparente, -gravity center centra la imagen en el lienzo, -geometry +X+Y establece la posición, y -extent AxBy establece el tamaño de la imagen.
    • -layers merge fusiona todas las imágenes en una sola capa, lo que resulta en una imagen final de salida output.png.

    Ten en cuenta que los tamaños de imagen y las coordenadas en el comando deben ser reemplazados con tus valores específicos. Además, los ... indican que debes seguir agregando comandos en paréntesis para cada imagen adicional que desees agregar al lienzo.

Comments are closed.