2012-10-11 9 views
9

Ich frage mich, ob es ein Kommandozeilen-Tool zur Verfügung, um verschachtelte Gruppen mit Transformationen in einem SVG-abflachen?Tool SVG verschachtelte Transformationen abflachen

In meinem speziellen Fall konvertiere ich eine von einer CAD-Software erstellte PDF in SVG und füge dann einige Elemente hinzu und publiziere das modifizierte SVG auf einer Webseite zur Ansicht. Die Reaktionszeit des SVG ist sehr träge (zum Schwenken und Zoomen) und ich fand, dass dies auf eine sehr große Anzahl von verschachtelten Gruppen innerhalb des SVG zurückzuführen ist, oft bis zu mehreren 100 Tiefen. Für jedes Element im SVG muss der Browser die Position über alle übergeordneten Knoten berechnen ...

Offensichtlich ist dies lächerlich, da alle diese Elemente eine einzige Transformation (Matrix) benötigen. Ich frage mich also, ob jemand ein Werkzeug kennt, um dies zu reduzieren (oder eine C# - oder Delphi-Implementierung, die dies tun würde ...).

+0

Haben Sie jemals eine anständige Lösung für dieses Problem finden? –

+0

@TomHall: Außer PStill, keine Lösung. Ich denke, dass es für jeden Code zu komplex sein kann, viele Polylinien (Pfade) in einfachere Formen zu konvertieren. – Optavius

+0

Die beste Option, die ich bisher gefunden habe, ist die Verwendung der Option "Formularfelder reduzieren" in Adobe PDF, wenn sie als "Optimierte PDF" gespeichert wird (Teil von "Objekte verwerfen"). Dadurch wird die Verschachtelung zumindest beseitigt, auch wenn die Anzahl der Objekte nicht unbedingt reduziert wird. – Optavius

Antwort

0

Sie können mit SVG Cleaner gehen. Es ist leider ein GUI-Tool, also entspricht es nicht wirklich Ihren Anforderungen, aber es bietet eine Stapelverarbeitungsphilosophie, die nützlich sein könnte.

+1

Leider geht SVG-Reiniger nicht so weit. Ich wünschte wirklich, dass es ein fertiges Werkzeug gäbe, um all diesen Unsinn wie '< Pfad d = "m0,841.61h5.67" /> ...' –

1

Dank Delapouite,

inzwischen fand ich diese: (PStill). Es macht eine perfekte Arbeit der Abflachung der Struktur (PDF zu PDF), aber das resultierende SVG enthält immer noch eine Menge Elemente, die es für einen Browser ziemlich unbrauchbar machen. Es ist wirklich das Problem, was CAD-Systeme zu PDF produzieren: Viele sehr kleine Pfade statt eines längeren Pfades. Ich bin mir ziemlich sicher, dass es noch Platz für Optimierungen gibt ... eines Tages :-)

0

Es gibt eine Option, Transformationen im Inkscape Graphics Editor zu reduzieren.
So können Sie die Inkscape Terminal-Befehle verwenden, um es zu erreichen, aber Sie werden vorhanden sein, wenn ein solcher Befehl suchen.

+1

Inkscape scheint den Job (zumindest in der GUI) zu tun, soweit ich das beurteilen kann, aber es ist eine sehr begrenzte Funktion: Ich muss alle Objekte auswählen, dann die Gruppierung aufheben, dann erneut auswählen und die Gruppierung aufheben, und wiederhole, bis ich sicher bin, dass es keine weiteren Gruppen mehr gibt. Jedes Mal, wenn dies eine gewisse Verarbeitungszeit erfordert, wird es ein ziemlich mühsamer Prozess. – Optavius

5

Das beste, was ich gefunden habe, ist Svgo https://github.com/svg/svgo Aber es ist immer noch nicht zufriedenstellend. SVGOs Ziel ist es, eine kleinere SVG-Datei zu erstellen. Das bedeutet, wenn eine Umwandlung eine kleinere SVG-Datei erlaubt, wird sie beibehalten. Meine Zwecke sind OP ähnlich, aber etwas anders. Ich bin auf der Suche nach etwas, das die SVG abflachen und komplett vereinfachen kann, um nur grundlegende Pfade & Elemente.

+0

https://jakearchibald.github.io/svgomg/ baut auf svgo erlaubt dies - versuchen Sie transformieren ' ' – Ruskin

+0

ich' < Pfad d = "M0 204h90" hub = "# 0f0" /> '... so wahrscheinlich über die Befehlszeile SVGO möglich. – Ruskin

-1

Ich bin neu in Inkscape, aber alt zu GIMP.

Ich bemerke, dass Inkscape einen Ordner "Erweiterungen" hat, in dem Python-Programme gefunden werden.

Ich vermute, dass Inkscape eine ähnliche Funktionalität (obwohl es in der Hilfe nicht sofort offensichtlich war) zu GIMP in Benutzern erlauben, ihre eigenen benutzerdefinierten Erweiterungen zu schreiben. In GIMP automatisieren die einfachsten Skripts einfach die manuellen Schritte, die Benutzer in einem ihrer Workflows aus Menüs auswählen.

jedoch komplexere Verarbeitung möglich ist als das, was auf der Speisekarte angeboten wird.