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.

Componer aleatoriamente imágenes superponiendo PNGs.

Estoy intentando usar Imagemagick v7 para crear imágenes en lotes combinando aleatoriamente capas que son archivos PNG transparentes, todos del mismo tamaño.

Soy completamente nuevo, así que copié el código que encontré aquí: https://stackoverflow.com/a/27621140/17835805

#!/bin/bash

# Número de archivos de salida - editar libremente :-)
NFILES=10

# Crear matrices de nombres de archivo en cada capa, asumiendo que los directorios son "Layer0", "Layer1", etc.
IFS=$'\n' L0files=($(find "Layer 0" -name "*.png"))
IFS=$'\n' L1files=($(find "Layer 1" -name "*.png"))
IFS=$'\n' L2files=($(find "Layer 2" -name "*.png"))
IFS=$'\n' L3files=($(find "Layer 3" -name "*.png"))

# Producir NFILES archivos de salida
for i in $(seq 1 $NFILES); do
    # Elegir un índice aleatorio en cada matriz de nombres de archivo
    index0=$( jot -r 1  0 $((${#L0files[@]} - 1)) )
    index1=$( jot -r 1  0 $((${#L1files[@]} - 1)) )
    index2=$( jot -r 1  0 $((${#L2files[@]} - 1)) )
    index3=$( jot -r 1  0 $((${#L3files[@]} - 1)) )

    # Obtener los archivos especificados por el índice aleatorio
    f0=${L0files[index0]}
    f1=${L1files[index1]}
    f2=${L2files[index2]}
    f3=${L3files[index3]}

    # Generar el nombre del archivo de salida, "output-nnn.png"
    # ... donde nnn comienza en 0 y aumenta hasta que no haya conflicto
    i=0
    while :; do
        out="output-$i.png"
        [ ! -f "$out" ] && break
        ((i++))
    done

    echo $f0, $f1, $f2, $f3 "=> $out"
    convert "$f0" "$f1" -composite "$f2" -composite "$f3" -composite "$out"
done

Logré que eligiera aleatoriamente mis capas pero:
1. No se crean archivos en la carpeta de salida.
2. No importa lo que ponga para NFILES, siempre se detiene en el primero (“output-o.png”).

Sería genial si también pudiera asegurarme de que una vez que se haya elegido y utilizado una capa de forma aleatoria, no se vuelva a elegir. ¿Quizás eliminando el archivo con ephemeral?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de inteligencia artificial, no puedo ver tu entorno local, pero puedo sugerirte algunos pasos que puedes seguir para resolver tus problemas.

    1. No se crean archivos en la carpeta de salida:
      • Verifica si la carpeta de salida existe y tiene permisos de escritura.
      • Comprueba si el comando para crear los archivos de salida está habilitado, ya que puede haber algún error en el código que impide su ejecución.
      • Asegúrate de que el paquete ImageMagick esté instalado correctamente.
    2. No importa lo que ponga para NFILES, siempre se detiene en el primero (“output-o.png”):
      • Verifica si el bucle de salida está funcionando correctamente.
      • Verifica que el número de secuencia del nombre de archivo se esté incrementando como debería.
      • Asegúrate de que tu paquete ImageMagick esté actualizado.

    Para evitar reutilizar las mismas capas, puedes eliminar el archivo después de haberlo utilizado. Puedes utilizar el comando “rm” para eliminar el archivo o moverlo a una carpeta de archivo para referencia futura.

    # Mueve el archivo a una carpeta de archivo
    mv <nombre_archivo> <carpeta_archivo>/
    
    # Elimina el archivo
    rm <nombre_archivo>
    

    Espero que esto te ayude a resolver tus problemas con ImageMagick.

Comments are closed.