Eliminar transformaciones en archivos SVG

He estado luchando con esto por un tiempo, y no puedo encontrar una respuesta (que funcione) en ninguna parte. Tengo un archivo SVG que se ve así:

 ...     

Quiero eliminar la línea transform="..." pero aún así mantener mi imagen en el lugar donde la coloqué (en InkScape). Si elimino manualmente la transformación, la imagen se ajusta a otra parte de la pantalla (como se esperaba), pero necesito deshacerme de la transformación por completo y, al mismo tiempo, hacer que la imagen permanezca exactamente donde la quiero. ¿Hay alguna manera de eliminar / aplanar las transformaciones en las coordenadas de la ruta? (Las únicas transformaciones con las que tengo que tratar son traducir y escalar, sin matrices).

Cómo eliminar las transformaciones en Inkscape

  1. Abrir archivo svg en Inkscape
  2. Ir a Editar -> Editor XML
  3. Encuentre atributos de “transformación” en capas y elimínelos

Cómo mover todos los objetos sin crear otros atributos de transformación

  1. Vaya a Edición -> Seleccionar todo en todas las capas
  2. Ir a Objeto -> Transformar

    En el panel Transformar

  3. Desmarque Movimiento relativo y marque Aplicar a cada objeto por separado

  4. Establezca los valores horizontales y verticales de acuerdo a sus necesidades y haga clic en Aplicar

Bingo

enter image description here

  1. Cargue su SVG en el Método Draw http://editor.method.ac (Archivo> Abrir imagen)
  2. Desagrupe sus elementos (Objeto> Desagrupar elementos) puede que tenga que hacer esto más de una vez.
  3. Selecciona tu camino
  4. Reoriente la ruta (Object> Reorient Paths).
  5. Guarde su imagen (Archivo> Guardar imagen) Si aparece en una nueva ventana, puede hacer clic con el botón derecho y “Guardar imagen como …”

Resolví cuál era el problema. Esperaba no tener que recurrir a la respuesta de Robert, ¡aunque me alegra la confirmación de que funcionaría! Al final, la respuesta de Duopixel fue la más cercana, aunque resultó que algo más estaba sucediendo también.

Cuando trabajas con diferentes rutas en documentos de Inkscape, creo que su comportamiento predeterminado es agruparlas bajo una etiqueta . Al modificar rutas en un grupo, Inkscape agregará automáticamente una transformación al grupo para representar estos cambios. Sin embargo, si abre el editor XML y arrastra su ruta fuera de la etiqueta y la convierte en su propia etiqueta , Inkscape puede editar los puntos individuales a voluntad . ¡Al final resultó ser un problema de agrupamiento a pesar de que solo estaba trabajando con un solo camino! Espero que esto ayude a otros en situaciones similares.

Para grupos, la reagrupación puede hacer el trabajo rápidamente. Seleccione el grupo y presione Ctrl + Shift + G (degrupo) y luego Ctrl + G (grupo).

Para algunos objetos que tienen un problema similar, espirales y estrellas para un ejemplo, la manera rápida es presionar Ctrl + Alt + C (trazo a ruta); sin embargo, esto convierte el objeto en una ruta pura y elimina todos los atributos extra, como sodipodi: cx, sodipodi: revoluciones, etc.

Hay una extensión de Inkscape llamada Apply Transforms que recalcula las rutas con sus transformaciones, esto es exactamente lo que he estado buscando.

Después de instalarlo, lo encontrará en Extensiones> Modificar ruta> Aplicar transformación .


créditos: foro de Inkscape> Eliminar todas las transformaciones mientras se mantiene en su lugar

En mi experiencia, si está utilizando Inkscape, basta con mover el elemento de ruta ligeramente (por ejemplo, con las teclas del cursor), e Inkscape eliminará el atributo de transformación y ajustará los datos de ruta en consecuencia. (Molesto si realmente desea mantener el atributo de transformación).

Por lo tanto, puedes simplemente seleccionar la ruta (asegúrate de que sea la ruta y no el grupo circundante), presiona la tecla de cursor derecha e izquierda, y listo.

Abre tu svg en Inkscape :

  • Seleccione el grupo que contiene todas las transformaciones que desea deshacerse de
  • Presione CTRL + U (desagrupar)
  • Presione CTRL + G (grupo nuevamente)

De esta forma, eliminará las transformaciones aplicadas al grupo y se las transferirá a las rutas que están dentro de este grupo.

Aclamaciones

Aunque prefiero Inkscape, Affinity Designer (~ $ 40 / Mac) me ahorró horas de esfuerzo al trabajar con Android Vector Drawables.

Abre un SVG, Archivo -> Exportar -> SVG -> Más -> Acoplar transformaciones funcionó muy bien.

Diseñador de afinidad

Cabe mencionar que existe el modo “Optimizado” en las preferencias:

 Inkscape Preferences > Transforms > Store transformation > Optimized 

Que se supone que minimiza la aparición de atributos de transform tanto como sea posible, (pero no lo hace).

Esto parece estar activado por defecto de todos modos.

De acuerdo con una discusión , una instancia donde este modo optimizado carece de celo es cuando la página cambia de tamaño . Esto provoca que se aplique una transformación de translate al elemento de capa . Parece que evacuar a los niños a otra capa es la mejor solución en este momento.

Inkscape tiene la opción de borrar los datos de transformación, pero aún deja el valor del objeto sin modificar.

En Inkscape, seleccione el objeto y el menú ‘Ruta’, ‘Simplificar’. Ahora, tendrás las transformaciones eliminadas.

Espero eso ayude.

En este caso, simplemente agregue la traducción a los valores de m para cada hijo, por lo que -10.254587 + 10.75 = -0.504587 y -308.96875 + 345.43597 = 36.46722.

Como todos los términos del ejemplo son relativos (es decir, minúsculas) eso es todo. Si alguno fuera absoluto (mayúsculas), p. Ej. M o C, tendrían que ajustarse también.

Para la escala, básicamente debes multiplicar todos los valores secundarios por la escala.

SVGO es una excelente herramienta de línea de comando de código abierto para esto y muchas otras optimizaciones. Hay una interfaz de usuario web en línea igualmente excelente para él llamada SVGOMG

Las opciones relevantes en este caso son moveGroupAttrsToElems (SVGOMG: Move group attrs to elements ) para mover atributos de transform de grupos a elementos de ruta, además de convertPathData (SVGOMG: rutas de Round/rewrite paths ) para aplanar la transform a d .

Para eliminar el atributo de transformación de un elemento g (grupo) en Inkscape, puede mover el grupo a su lugar final, desagruparlo y luego reagrupar todos los elementos. Ahora se ha creado un nuevo grupo, y si no lo mueve de nuevo, no tendrá asociado un atributo de transformación.

Lo encontré:

  • Establezca el tamaño de página deseado *
  • Si su capa actual tiene una transformación (verifique con el editor XML, es el grupo superior debajo del elemento SVG) luego cree una nueva capa y mueva todos los objetos a ella
  • Desagrupa cualquier grupo (esto puede no ser necesario, YMMV)
  • Seleccione todos los objetos y aplique una transformación nula (como la escala al 100% 100% o la flecha hacia la derecha + flecha hacia la izquierda) mientras tiene la transformación de la tienda: Optimizado en Preferencias / Transformaciones
  • Si tuvieras que deshacer algún grupo, ahora puedes reagruparlos
  • Guarde una copia como SVG optimizado y configure la precisión numérica deseada

*: O al menos coloque los objetos donde los necesita, en relación con la esquina superior izquierda de la página. ¡Es desafortunado que las coordenadas SVG hagan referencia a la esquina superior izquierda, mientras que Inkscape cambia el tamaño de la página relativa a la parte inferior izquierda!

Si alguien aterriza aquí buscando una solución para hacer esto en Sketch 3, seleccione la capa y luego haga clic en Layer-> Paths-> Flatten.

  1. Seleccione los elementos en cuestión
  2. Objeto> Desagrupar (repetir hasta que todo esté desagrupado, ver el editor XML para nodos nesteds)
  3. Ruta> Objeto a ruta (convierte polígonos en rutas)
  4. Objeto> Transformar> Desmarcar movimiento relativo> Aplicar

Pude deshacerme de una transformación de matrix(...) (debido a la duplicación) al combinar la ruta con un rectángulo y luego eliminar los nodos del rectángulo. Sin embargo, la parte de translate(...) mantuvo.

Probé la solución publicada aquí, es decir, eliminar las tags de grupo en el archivo SVG y volver a abrirlo en Inkscape (0.48.3.1 en mi caso). ¡Ay, después de que traduje los caminos otra vez usando el modo de selección y transformación (F1) y lo guardé, las tags de grupo reaparecieron! Inkscape guarda todas las transformaciones aplicadas a la ruta en un elemento de grupo circundante. A menos que use la herramienta de selección de nodo de camino (F2), presione ctrl + a y mueva los nodos de la ruta a su lugar correcto. Después de hacer esto y guardarlo después, Inkscape no agregó las tags de grupo porque esta traducción se aplicó directamente al modelo de ruta. Espero que esto ayude.

En mi caso, los grupos son en realidad causados ​​por capas. Al eliminar todas las capas del documento, se eliminó el grupo y se transformó (posiblemente combinado con la desagrupación de objetos y su reagrupación, etc., como en Eliminar transformaciones en archivos SVG (respuesta-35490189 de @Charlie arriba))

Mi problema específico era con símbolos que se definieron fuera de la página, por lo que es necesario que se muestre una transformación en la página.

Para mover los símbolos a la página sin requerir una transformación, tuve que seguir estos pasos en Inkscape:

  1. Abre la ventana de Símbolos (Shift + Ctrl + Y)
  2. Elimine el símbolo de la biblioteca de documentos. (Hay un botón para eso en la ventana).
  3. Ahora el gráfico aparece en el documento, fuera del límite de la página.
  4. Desagrupa el gráfico. (¡Este es un paso vital!)
  5. Mueva el gráfico dentro del límite de la página.
  6. Agregue el gráfico a la biblioteca de símbolos.

Esto parece aleatorio, pero nada más lo intenté funcionó, así que aquí vas al azar otra persona. Algunos de mis caminos tenían una especie de margen alrededor de ellos que solo se podía ver al seleccionarlos ( ejemplo ) Creo que esto fue creado cuando pegué una capa de otro archivo de Inkscape y lo giré 90 grados. Esto hizo que un patrón de relleno en las formas tenga una transformación diferente (líneas espaciadas más separadas). También hizo que los objetos alineados no funcionaran como se esperaba. El uso de Apply Transform mencionado por @Piotr_cz solucionó el problema de la transformación, pero el margen extraño permaneció. Accidentalmente me deshice de él cambiando el desenfoque de trazo a cualquier valor y cambiándolo a cero.

De alguna manera no tuve suerte con ninguno de los enfoques. Si hay sección en tu svg y usa esto:

  

puede que tenga que eliminar todos los usos y sacar todo de la sección defs. Luego, puede usar Inkscape para colocarlo todo de la manera correcta y luego aplicar las transformaciones usando el complemento mencionado. Espero que ayude a alguien.

He estado teniendo este problema por años. La solución es claramente poder jugar dinámicamente con las transformaciones en el navegador, si no se va a “arreglar” en inkscape.

Un usuario Mc en los foros de Inkscape me dio esta solución .

La solución crea la transformación actual entre un elemento SVG y su elemento raíz SVG, y luego devuelve un conjunto completo de información de BBox en función del total de las transformadas.

También sería posible cambiar fácilmente el elemento con el que están relacionados los cálculos, en caso de que desee hacerlo en el navegador entre dos partes del mismo archivo SVG.

Finalmente, puedo tener una vista SVG panorámica.