Proyecto de imagen con múltiples selecciones, exportar a archivos separados

Para un proyecto de desarrollo de juegos de hobby, estoy buscando una manera de automatizar el siguiente flujo de trabajo, puede ser en cualquier herramienta de edición de fotos/imágenes.

  1. cargar una imagen de alta resolución
  2. hacer selecciones múltiples
  3. dar a cada selección un nombre
  4. exportar cada selección a un archivo PNG separado (con el nombre)
  5. exportar coordenadas de selecciones a archivo de texto (nombre = x,y,h,w)
  6. guardar imagen con selecciones para uso posterior o reexportación

En resumen, tome una imagen de alta resolución, haga selecciones múltiples y luego exporte cada selección a un archivo PNG separado, mientras exporta también una lista de las coordenadas de las selecciones a un archivo de texto. Vea lo que quiero decir en la imagen simulada a continuación:

guarde selecciones múltiples para separar imágenes y un archivo de coordenadas

Ahora estoy haciendo todos estos pasos a mano y la mayoría de las imágenes tienen 70-80 partes. Cada vez que hay un error, actualizaciones de imagen, cambios en la resolución, etc., tengo que rehacer partes grandes o incluso todo, aunque las selecciones sean aproximadamente las mismas.

Algunos programas de edición de fotos admiten complementos y secuencias de comandos, y puedo hacer secuencias de comandos (lua, python, javascript) sin problemas. Pero no conozco ningún editor de fotos que admita guardar selecciones múltiples . Si conoce una buena solución para esto en cualquier editor de fotos, como Painshop, PhotoShop, Coral Draw o un programa OpenSource como Gimp o Paint Dot Net, etc., hágamelo saber.

¿Este pasatiempo tuyo está en github? porque me parece muy fascinante. Me encantaría jugar una versión emulada de los juegos rusos de Game N Watch.
Probablemente encuentre esto interesante en.wikipedia.org/wiki/…
@LateralTerminal Solo vi tu comentario justo ahora, sí, hay una página de github, está aquí github.com/BdR76/lcdgame.js y mira la carpeta \utils\

Respuestas (4)

Pero no conozco ningún editor de fotos que admita guardar selecciones múltiples.

Una solución para Gimp:

  • En el script, haga el equivalente de Select>To path(usando la pdb.plug_in_sel2path(image, drawable)función). Esto creará una ruta hecha de varios "trazos", siendo cada trazo una curva cerrada que representa uno de los elementos seleccionados (*).
  • Luego puede iterar los trazos en la ruta, y para cada trazo:
    • crea un nuevo camino a partir de él
    • hacer una selección de esa ruta
    • crear una nueva capa que contenga solo esa selección
    • guardar esa capa en el archivo
    • copie el desplazamiento de esa capa en su archivo de datos (tenga en cuenta que dado que las coordenadas de los puntos de trazo están disponibles, también puede calcular el centroide del objeto)

Para ver algunos scripts de Gimp de muestra en Python, incluido un conjunto completo que trata principalmente con rutas, consulte aquí y aquí .

(*) Algunos conceptos básicos de las rutas de Gimp :

Para que quede claro, puedo seleccionar cada forma, usar selection to pathpara crear una lista completa pathsy cambiar el nombre de cada pathuna a un nombre útil. Pero entonces, ¿podría usarse una secuencia de comandos custom.py para iterar a través de todas estas rutas, convertir cada ruta nuevamente en selecciones y guardarla como un archivo png? ¿Es ese el enfoque al que te refieres?
Algo así como. Mi sugerencia es seleccionar todos los elementos de una sola vez, por ejemplo, pintándolos con el modo de máscara rápida . Pero su enfoque también es válido, aunque sea un poco más intensivo en clics. Desde el punto de vista del script, itera varias rutas con un solo trazo (su método), o itera los trazos en una sola ruta (mi método). No mucha diferencia. Cualquiera de los dos casos tendría menos de 100 líneas de python.
De acuerdo, gracias, pero el problema con una sola ruta es que no puedes dar nombres útiles a las partes (trampoline_1, baby_16, fire_3, etc.). Por cierto, acabo de encontrar un script que parece hacer casi exactamente lo que estoy buscando; dividir una imagen usando las rutas registration.gimp.org/node/27913 , así que también lo miraré de cerca
Bueno, si necesita dar un nombre, entonces usar una ruta para cada uno tiene sentido y no lo retrasará mucho. Sí, el guión de Arakne probablemente pueda ayudar (o es un buen comienzo para el tuyo).
Para su información, he usado los consejos de Python en este proyecto :) github.com/BdR76/lcdgame.js/tree/master/utils

Una solución (parcial/que aún no funciona) para GIMP, utilizando las piezas separadas ("trazos") de una selección:

  1. Coloque el script GIMP de Andrew Kvalheim en un archivo ~/.gimp-2.8/scripts/export-selected-regions.scm(o el lugar equivalente en Windows / Mac OS X).

  2. Inicie GIMP.

  3. Crea tu selección.

  4. Elija "Seleccionar → Exportar regiones seleccionadas" en el menú. (Este es el nuevo elemento de menú agregado por el script).

Advertencias:

  • A partir de GIMP 2.8, este script no funcionó y se quejó del "formato de imagen desconocido". Por lo tanto, necesitará una actualización, pero luego proporcionará una solución. Informe en los comentarios cuando lo haga funcionar.

  • En comparación con una solución basada en rutas (en las otras respuestas aquí), esta solución necesita menos clics para definir las selecciones, pero solo es aplicable si (1) no necesita nombres autodefinidos para sus imágenes de salida y (2) ninguna de sus piezas de selección se superpone (ya que eso daría como resultado un "trazo" combinado al definir la selección y, en consecuencia, en una imagen de salida para ese "trazo").

Gracias por responder. Sin embargo, los nombres autodefinidos para cada imagen de salida son muy importantes, y muchas de las selecciones se superponen. Mientras tanto, ya tenía una solución viable, vea el script export_paths_to_png.py aquí github.com/BdR76/lcdgame.js/tree/master/utils

Una solución (parcial/que aún no funciona) para GIMP, que utiliza un proceso semiautomático rápido de "hacer una selección, guardarla como PNG, repetir":

  1. Coloque la secuencia de comandos Guardar área en un archivo ~/.gimp-2.8/scripts/savearea.scm(o el lugar equivalente en Windows / Mac OS X).

  2. Inicie GIMP.

  3. Vaya a "Editar → Métodos abreviados de teclado" y asigne un método abreviado de teclado al elemento de menú "Archivo → Guardar área" (el agregado por el script que instaló). Puede usar una sola tecla sin modificador, por ejemplo /.

  4. Para usar el guión:

    1. Has una elección.
    2. Presione el acceso directo que asignó para acceder a la función "Archivo → Guardar área" y guarde la selección en un archivo.
    3. Repita para todas las selecciones que desee guardar.

Advertencias: el script se actualizó por última vez en 2007, por lo que probablemente no funcionará en un GIMP 2.8 actual (aunque no lo probé). Pero es una solución parcial que podría arreglarse. Además, las instrucciones de instalación mencionan que si el script no funciona, se deben convertir las imágenes de origen a un formato diferente. PNG con "Imagen → Modo → RGB" parece una buena opción, ya que el script usa ese formato para guardar las selecciones.

La solución de trabajo que tengo es la siguiente. Selecciona cada una de las formas y guarda la selección como una ruta, y nombra las rutas como "mario_1", "mario_2", "mario_3", "crate_1", etc. Luego puedes exportar todas las formas a archivos PNG separados usando el export_paths_to_png.pyscript de Python para GIMP. La ventaja de esto es que las selecciones+nombres se almacenan en un archivo, lo cual es bueno para archivar para que luego pueda hacer algunos cambios y luego simplemente volver a exportar. Otra ventaja es que si cambia el tamaño de toda la imagen, las rutas también cambiarán de tamaño.
Correcto, el tuyo es el mejor seguro. Agregué una respuesta para eso también ahora. Considere las otras respuestas aquí solo "en aras de la exhaustividad": alguien, algún día, podría necesitar una de ellas en su lugar :) ¡Saludos!

Una solución (totalmente funcional) desarrollada por el cartel original @BdR y mencionada en este comentario . Es la solución más avanzada para GIMP hasta el momento y funciona completamente en el GIMP 2.8 actual.

  1. Coloque el script export_paths_to_png.py en la carpeta ~/.gimp-2.8/plug-ins/(o el lugar equivalente en Windows / Mac OS X).

  2. En Linux, haga que ese script sea ejecutable:

    chmod a+x ~/.gimp-2.8/plug-ins/export_paths_to_png.py
    
  3. En Linux, haga que los archivos generados se utilicen /en lugar de \como separadores de directorios en el script (líneas 29 y 68 ).

  4. Inicie GIMP.

  5. Cree y asigne un nombre a las rutas de GIMP para cada selección:

    1. Crea la selección.

    2. En el cuadro de diálogo "Rutas", haga clic en "Selección de ruta".

    3. Opcional: cambia el nombre de tu ruta. El nombre de la ruta se utilizará como nombre de archivo al guardar.

    4. Repita para todas sus selecciones.

  6. Haga clic en "Filtros → Rutas → Exportar rutas a PNG" (el elemento de menú agregado por el script que instaló), complete el cuadro de diálogo y haga clic en "Aceptar".

ventajas:

  • Funciona completamente con GIMP 2.8 actual (lo probé).
  • Puede guardar todas las rutas junto con su imagen guardando su imagen en el formato nativo de GIMP .xcf. Esto ahorra trabajo cuando necesita hacer algunos cambios y volver a exportar las imágenes más tarde.
  • Cuando cambia el tamaño de la imagen, las rutas se redimensionan proporcionalmente para que aún "encajen".
  • Las rutas se pueden superponer sin problemas, de modo que un píxel se puede exportar como parte de varias imágenes de salida cuando sea necesario.
  • Los nombres, las coordenadas de origen y los tamaños de todas las rutas también se guardan como un archivo de texto orgcoords.jsonjunto con su directorio de salida, para usar con sus propios scripts. Si sus rutas son selecciones simples con la "Herramienta de selección de rectángulos" de GIMP, toda la información sobre ellas está contenida en el .jsonarchivo de esta manera.