Estou lutando com isso há um tempo e parece que não consigo encontrar uma resposta (que funcione) em qualquer lugar. Eu tenho um arquivo SVG que se parece com isso:
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
...
width="72.9375"
height="58.21875"
...>
...
<g
...
transform="translate(10.75,-308.96875)"
style="...">
<path
inkscape:connector-curvature="0"
d="m -10.254587,345.43597 c 0,-1.41732 0.17692,-2.85384 0.5312502,-3.5625 0.70866,-1.41733 2.14518,-2.82259 3.5625,-3.53125 1.41733,-0.70866 2.11392,-0.70867 3.53125,0 1.41732,0.70866 ... z"
... />
</g>
</svg>
Quero remover a transform="..."
linha, mas ainda assim minha imagem fica onde a coloquei (no InkScape). Se eu remover manualmente a transformação, a imagem passará para outra parte da tela (conforme o esperado), mas preciso me livrar completamente da transformação e, ao mesmo tempo, manter a imagem exatamente onde eu quero. Existe uma maneira de remover / achatar as transformações nas próprias coordenadas do caminho? (As únicas transformações com as quais tenho de lidar são traduzir e dimensionar, sem matrizes.)
Respostas:
Como remover transformações no Inkscape
Como mover todos os objetos completamente sem criar outros atributos de transformação
Vá para Objeto -> Transformar
No painel Transformar
Desmarque Mover relativo e marque Aplicar a cada objeto separadamente
fonte
Eu descobri qual era o problema. Eu esperava não ter que recorrer à resposta de Robert, embora eu esteja feliz por confirmar que funcionaria! No final, a resposta de Duopixel foi na verdade a mais próxima, embora aconteça alguma outra coisa acontecendo também.
Quando você trabalha com caminhos diferentes nos documentos do Inkscape, acredito que o comportamento padrão é agrupá-los sob uma
<svg:g.../>
tag. Ao modificar caminhos em um grupo, o Inkscape adiciona automaticamente uma transformação ao grupo para representar essas alterações. No entanto, se você abrir o editor XML e arrastar o seu caminho para fora da<svg:g.../>
marca e torná-la sua própria<svg:path.../>
marca, o Inkscape poderá editar os pontos individuais à vontade. No final, acabou sendo um problema de agrupamento, embora eu estivesse trabalhando apenas com um caminho! Espero que isso ajude outras pessoas em situações semelhantes.fonte
fonte
Há uma extensão do inkscape chamada Apply Transforms que recalcula os caminhos com suas transformações. É exatamente isso que eu tenho procurado.
Após a instalação, você encontrará o menu em Extensões> Modificar caminho> Aplicar transformação .
créditos: Fórum Inkscape> Remova todas as transformações enquanto mantém o local
fonte
Para grupos, o reagrupamento pode fazer o trabalho rapidamente. Selecione o grupo e pressione Ctrl + Shift + G (desagrupar) e, em seguida, Ctrl + G (grupo).
Para alguns objetos que têm um problema semelhante, espirais e estrelas, por exemplo, a maneira mais rápida é pressionar Ctrl + Alt + C (toque no caminho) - no entanto, isso converte o objeto em um caminho puro e remove todos os atributos extras, como sodipodi: cx, sodipodi: revoluções e assim por diante.
fonte
Abra seu svg no Inkscape :
Dessa forma, você se livrará das transformações aplicadas ao grupo e elas serão transferidas para os caminhos contidos nesse grupo.
fonte
Na minha experiência, se você estiver usando o Inkscape, basta mover um pouco o elemento do caminho (por exemplo, com as teclas do cursor), e o Inkscape excluirá o atributo de transformação e ajustará os dados do caminho de acordo. (Irritante, se você realmente deseja manter o atributo de transformação.)
Portanto, você pode simplesmente selecionar o caminho (verifique se é o caminho e não o grupo circundante), pressione a tecla de cursor direita e esquerda e pronto.
fonte
<g>
e eu quero manter a transformação na<g>
.Enquanto prefiro o Inkscape, o Affinity Designer (~ $ 40 / Mac) me salvou horas de esforço ao trabalhar com o Android Vector Drawables.
Abra um SVG, Arquivo -> Exportar -> SVG -> Mais -> Achatar transformações funcionou muito bem.
fonte
O SVGO é uma excelente ferramenta de linha de comando de código aberto para isso e várias outras otimizações. Existe uma interface da web on-line igualmente excelente, chamada SVGOMG
As opções relevantes neste caso são
moveGroupAttrsToElems
(SVGOMG:Move group attrs to elements
) para movertransform
atributos de grupos de elementos de caminho, maisconvertPathData
(SVGOMG:Round/rewrite paths
) para achatartransform
emd
.fonte
Deve-se mencionar que existe o modo "Otimizado" nas preferências:
Preferências do Inkscape> Transformações> Transformação de loja> Otimizado
O que deve minimizar a ocorrência de
transform
atributos o máximo possível (mas não).De qualquer maneira, parece estar ativado por padrão.
Segundo uma discussão , uma instância em que esse modo Otimizado não possui zelo é quando a página é redimensionada . Isso faz com que uma
translate
transformação seja aplicada ao<g>
elemento da camada . Parece que evacuar as crianças para outra camada é a melhor solução no momento.fonte
translate
transformações irritantes em todas as camadas, tente abrir o.svg
arquivo em um editor de texto e manipule os atributos de altura e largura que aparecem na parte superior.O Inkscape tem a opção de limpar os dados da transformação, mas ainda não modifica o valor do objeto.
No Inkscape, selecione o objeto e o menu 'Caminho', 'Simplificar'. Agora, você terá as transformações removidas.
fonte
Nesse caso, basta adicionar a conversão aos valores m para cada filho, para -10,254587 + 10,75 = -0,504587 e -308,96875 + 345,43597 = 36,46722.
Como todos os termos do exemplo são relativos (ou seja, minúsculas), isso é tudo. Se algum fosse absoluto (maiúsculo), por exemplo, M ou C, eles também teriam que ser ajustados.
Para a escala, você basicamente multiplicaria todos os valores filhos pela escala.
fonte
fonte
<g>
withtransform
permanece como estava. Além disso, meu objeto (exatamente como o mostrado na pergunta aqui) já é um caminho.Para remover o atributo de transformação de um
g
elemento (grupo) no Inkscape, você pode mover o grupo para seu local final, desagrupá-lo e reagrupar todos os elementos. Agora, um novo grupo foi criado e, se você não o mover novamente, ele não receberá um atributo de transformação anexado a ele.fonte
Se alguém chegar aqui procurando uma solução para fazer isso no Sketch 3, selecione a camada e clique em Camada-> Caminhos-> Achatar.
fonte
Encontrei:
*: Ou pelo menos coloque os objetos onde você precisar deles, em relação ao canto superior esquerdo da página. É lamentável que as coordenadas SVG façam referência ao canto superior esquerdo, enquanto o Inkscape redimensiona a página em relação ao canto inferior esquerdo!
fonte
Consegui me livrar de uma
matrix(...)
transformação (devido ao espelhamento) combinando o caminho com um retângulo e removendo os nós do retângulo. Atranslate(...)
parte ficou embora.fonte
No meu caso, salvar como SVG otimizado resolveu o problema. Portanto, no Inkscape, use:
Arquivo -> Salvar como ... -> SVG otimizado.
fonte
transform
atributo não ser suportado pelo Android Studio.Isso funciona se você estiver usando o Inkscape:
Em todos os casos que tentei, isso remove quaisquer atributos de transformação. Não tenho certeza se funciona para SVG mais complexo.
fonte
Eu tentei a solução postada aqui, ou seja, para remover as tags de grupo no arquivo SVG e reabri-lo no Inkscape (0.48.3.1 no meu caso). Infelizmente, depois de traduzir os caminhos novamente usando o modo de seleção e transformação (F1) e salvá-lo, as tags de grupo reapareceram! O Inkscape salva todas as transformações aplicadas ao caminho em um elemento de grupo circundante. A menos que você use a ferramenta de seleção de nós do caminho (F2), pressione ctrl + a e mova os nós do caminho para o lugar certo. Depois que eu fiz isso e salvei depois, o Inkscape não adicionou as tags de grupo, porque essa tradução se aplicava diretamente ao modelo de caminho. Espero que isto ajude.
fonte
No meu caso, os grupos são realmente causados por camadas. A exclusão de todas as camadas do documento removeu o grupo e a transformação (possivelmente combinada com o desagrupamento de objetos e o reagrupamento, etc., como em Removendo transformações em arquivos SVG (answer-35490189 de @Charlie acima))
fonte
Meu problema específico era com símbolos definidos fora da página, exigindo, portanto, que uma transformação fosse mostrada na página.
Para mover os símbolos para a página sem exigir uma transformação, tive que seguir estas etapas no Inkscape:
fonte
Isso parece aleatório, mas nada mais que tentei funcionou, então aqui você vai aleatoriamente para outra pessoa. Alguns dos meus caminhos tinham uma espécie de margem ao redor deles, que só podia ser vista ao selecioná-los ( ). Acho que isso foi criado quando colei uma camada de outro arquivo do inkscape e a girei 90 graus. Isso fez com que um preenchimento de padrão nas formas tivesse uma transformação diferente (linhas espaçadas mais afastadas). Também fez com que os objetos de alinhamento não funcionassem conforme o esperado. O uso da transformação de transformação mencionada por @Piotr_cz corrigiu o problema de transformação, mas a margem estranha permaneceu. Eu acidentalmente me livrei disso, alterando o Blur on Stroke para qualquer valor e alterando-o novamente para zero.
fonte
De alguma forma, não tive sorte com nenhuma das abordagens. Se houver uma
<defs>
seção no seu svg e usos como este:pode ser necessário excluir todos os usos e remover tudo da seção defs. Em seguida, você pode usar o inkscape para colocar tudo da maneira correta e aplicar transformações usando o plug-in mencionado. Espero que ajude alguém.
fonte
Eu tenho esse problema há anos. A solução é claramente poder jogar dinamicamente com transformações no navegador, se não for "corrigido" no inkscape.
Um usuário Mc nos fóruns do Inkscape me deu essa solução .
A solução cria a transformação atual entre um elemento SVG e seu elemento raiz SVG e, em seguida, retorna um conjunto completo de informações BBox com base no total das transformações.
Também seria possível alterar facilmente a qual elemento os cálculos são relativos, caso você queira fazer no trabalho do navegador entre duas partes do mesmo arquivo SVG.
Finalmente, posso ter uma viewport SVG panorâmica.
fonte
Inkscape 1.0 no Kubuntu 20.04
Embora este tópico seja bastante antigo, gostaria de postar minha experiência / solução. Me deparei com esse problema ao tentar criar um modelo para o ambiente de trabalho TechDrawing do FreeCAD. Esses modelos não devem conter nenhuma transformação.
No meu caso, tive que adicionar um logotipo da empresa a partir de um arquivo .svg externo (totalmente feito com o Inkscape). Esse logotipo contém elementos gráficos e de texto. Ao copiar esse logotipo para o modelo, foram criadas transformações, que fizeram com que o modelo não funcionasse corretamente no FreeCAD.
Primeiro, esta solução sugerida em www.freecadweb.org / ... não funciona para mim. Por isso pesquisei na web e encontrei essa discussão.
Segundo, nenhuma das soluções sugeridas acima funcionou para mim, mas elas me colocaram no caminho certo. A resposta de Charlie chegou perto, mas Objeto> Transformar> Desmarcar movimento relativo> Aplicar não mostrou diferença.
O que funcionou para mim foi:
Funciona bem quando eu uso esse modelo no FreeCAD.
Um detalhe estranho: embora minha solução mostre que os elementos de texto eram o problema no meu caso, não pode ser tão fácil assim. De fato, o documento base (aquele no qual copiei o logotipo) contém muitos elementos de texto e não os converti. Portanto, pode ser a combinação de "fonte externa" e elementos de texto. Eu apenas postei esses detalhes como uma dica para outras pessoas, que podem ter problemas relacionados.
fonte