Guarde varios objetos del archivo vectorial en archivos separados usando Inkscape / OS / Freeware


9

Tengo un archivo vectorial descargado (formato AI). El archivo contiene imágenes vectoriales simples de varias razas de perros. Cargué el archivo en Inkscape, los desagrupé y quisiera una forma de guardar cada vector de perro como un archivo separado. ¿Hay alguna manera de automatizar esto con Inkscape o alguna otra herramienta OS / Freeware? De lo contrario, tendré que seleccionar cada uno y Guardar como. Cualquier ayuda es muy apreciada!

ACTUALIZACIÓN Gracias a JSBueno por el asesoramiento sobre la edición del archivo SVG real. No me di cuenta de que SVG era solo un archivo XML. Debería poder recorrer fácilmente el archivo y exportar cada perro como un archivo separado. Esto, por cierto, será mucho más rápido que hacerlo a través de la interfaz, que era el objetivo de esta publicación. Gracias a todos por el consejo.


¿Por qué no puede seleccionar cada uno y guardar como? ¿Realmente hay tantas imágenes que una solución automatizada es obligatoria?
Scott

2
Para poder automatizar esto, debe poder definir elementos "dog" para extraer del archivo svg. En realidad, sus elementos de perro consistirán en líneas compuestas simples hasta grupos recortados. Le sugiero que aprenda los atajos de teclado necesarios, seleccione un poco de música y continúe con ella.

Sí, tengo más de 80 objetos individuales para este. Solo estoy buscando una forma más rápida, pero lo haré manualmente si eso es lo que se necesita.
dinki

Ciertamente puedes escribir eso. Se necesitaría a alguien experto en Python, por ejemplo, al menos el tiempo requerido para "guardar como" 30 de sus 80 perros para crear dicho script. Un codificador no calificado, o incluso alguien experto pero no familiarizado con las funciones de helerp / XML de Inkscape, podría tomar mucho más tiempo que salvar a los 80 perros.
jsbueno

En última instancia, puede escribir el archivo SVG en un editor de texto (Notepad ++) y verificar si cada perro está contenido en una etiqueta SVG separada; por lo tanto, es importante copiar / pegar texto en lugar de hacerlo con imágenes en la interfaz de usuario de Inkscape . Todavía podría ser más rápido usando la interfaz de usuario de Inkscape.
jsbueno

Respuestas:


5

Hay dos soluciones que he encontrado para exportar múltiples objetos de Inkscape como SVG. Estos métodos tienen la ventaja de ser scripts que pueden ejecutarse automáticamente y no necesitan edición de SVG en editores de texto.

  1. svg-objects-export

El script svg-objects-export funciona exportando todos los objetos basados ​​en expresiones regulares. En su caso, funcionaría exportando todos los objetos con una ID particular. Para usarlo primero clone o descargue el script desde Github .

En Inkscape, debe cambiar la ID de todos los objetos que desea exportar para que tengan el mismo patrón de nombre de archivo. Para hacerlo, abra el cuadro de diálogo Propiedades del objeto yendo a Objeto> Propiedades del objeto o presionando Ctrl+ Shift+ O. En el campo ID, cámbielos a todos para que tengan el mismo ID de nombre base Dog_1, por ejemplo Dog_2, Dog_3etc. (los objetos no pueden tener el mismo ID).

ingrese la descripción de la imagen aquí

Con el archivo guardado y el script descargado, en una terminal ejecute el siguiente comando

python svg-objects-export.py --pattern 'Dog_*' /path/to/your/file.svg

Esto exportará todos los objetos con el ID de nombre base "Dog_".

  1. inx-exportobjects

La extensión inks-exportobjects inkscape simplemente exportará todos los objetos seleccionados. Para usarlo primero clone o descargue la extensión desde Gitlab . Para instalarlo copiar los archivos export_objects.inxy export_objects.pya .config/inkscape/extensions/. En Inkscape, tendrá una opción llamada "Objetos a archivos ..." en Extensiones> Exportaciones. Seleccione los objetos que desea instalar y seleccione esta opción.

ingrese la descripción de la imagen aquí

En este cuadro de diálogo, simplemente cambie el Directorio de exportación al lugar donde desea guardar sus archivos y cambie el Nombre base al nuevo nombre de los archivos y luego presione Aplicar.

ingrese la descripción de la imagen aquí

Los archivos se exportarán a su directorio especificado.

Cada una de las soluciones tiene muchas otras opciones, como la exportación de gifs animados, con los que definitivamente debes experimentar.


Excelente solución @hellocatfood Solo un consejo: antes de exportar, puede cambiar el tamaño del lienzo. En mi caso, tenía muchos íconos. Descubrí el ancho máximo y la altura máxima de los iconos. Y luego redimensionó el lienzo a la altura respectiva x ancho. A continuación, seleccione todos los objetos y alinéelos horizontal y verticalmente, y luego inicie el proceso de exportación. De esta manera, tendrá los svg con la altura y el ancho adecuados.
Anish Nair

1

Dependiendo de la condición previa, de que todos sus objetos están agrupados y no combinados en grupos más grandes, a continuación se explica cómo hacerlo. (Usé gatos en el ejemplo, porque los perros no estaban disponibles).

ingrese la descripción de la imagen aquí En la parte inferior derecha, verá un gato resaltado, id. De objeto 5358, que es una ruta única, por lo que agregué un piso verde más tarde que lo cambió al objeto 5364 que ocurrirá más tarde, así que no se confunda. :)

Obtiene el editor xml presionando el botón 4 desde la derecha (flecha 1).

Cambié g5358 a g-cat-5358 (campo 4) para facilitar que una herramienta de texto elija estos objetos que funcionan para la mayoría de los elementos que no colisionan con xml-svg-names (color, meta, id, ... )

En la ventana izquierda, verá que ya hay una entidad renombrada, g-cat-5312, cerca de la parte superior en el mismo nivel de sangría.

Inkscape organiza identificadores únicos para grupos, pero no es necesario que tengan la forma gNUMBER, puede mezclar otros caracteres. Simplemente no elija un identificador ya existente.

Después de cambiar el identificador, presione 'setzen (set)' (5) para confirmar su cambio. Ves una interfaz alemana aquí, YMMV.

Guarde el svg (como demo-cats.svg). Ahora pasamos a las secuencias de comandos.

for cat in $( grep g-cat- demo-cats.svg )
do
  id=${cat//[^0-9]/}
  echo $id
  (head -n 53 demo-cats.svg; sed -n "/$cat/,/^    <\/g>/p" demo-cats.svg; echo "</svg>" ) > cat-${id}.svg
done

¿Qué hace? Hace greps (busca con grep) para el patrón "g-cat-" que es el comienzo de nuestra interesante sección. id=${cat//[^0-9]/}extrae el id en bash de la expresión. Echo lo imprime en la pantalla, lo que debería ayudar a encontrar el error si algo sale mal. head -n 53 demo-cats.svg toma las primeras 53 líneas del svg, que contiene todo el svg-boilerplate. Dependiendo de su configuración con diferentes formatos de svg (inkscape, comprimido, svg normal, inkscape-comprimido) esto puede variar. Con nl demo-cats.svg | lesspuedes n umerate los l ines, para encontrar el punto de corte adecuado en su caso.

  </metadata>
  <g
     inkscape:label="Layer 1"
     inkscape:groupmode="layer"
     id="layer1">
     <g

^ Hasta esta parte, se deben incluir las líneas.

El siguiente comando se realiza con el comando s tream ed it : sed -n "/$cat/,/^ <\/g>/p" demo-cats.svg;dice (-n) no print (but) search para el grupo cat, hasta la etiqueta de cierre g en el nivel de sangría 2, que es 4 espacios antes de </g>si no lo hizo cambiar las preferencias de Inkscape, que quizás recuerdes si lo hicieras. A continuación, añadir la etiqueta de cierre para SVG: echo "</svg>". Escriba la salida en el archivo 'cat- $ id.svg' (esto sobrescribe los archivos silenciosamente existentes).

Así que termino con dos archivos: cat-5312.svg y cat-5364.svg.

Una solución más elegante debería ser posible con xmlstarlet o herramientas similares, que están hechas para buscar y editar archivos xml. Desafortunadamente, no estoy acostumbrado y no pude hacerlo funcionar después de leer 10 minutos de documentación. No necesitaría cambiar el nombre de los grupos al principio.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.