Wie behält man nur die sichtbaren Teile jedes Objekts/Pfades eines SVG-Bildes? Wie das ganze SVG "abflachen".

Ich habe ein SVG-Bild mit vielen Objekten, gestapelt. Was ich brauche, ist ein endgültiges SVG mit dem gleichen visuellen Ergebnis, aber so, dass ich die Deckkraft jedes Objekts ändern kann, ohne die verborgenen Teile der darunter liegenden Objekte zu enthüllen, sondern nur das „Loch“ dahinter.

Ich habe dieses Diagramm erstellt , um die Anforderung zu veranschaulichen:Diagrammbeispielbild

Dieses obige Beispiel wurde von Hand mit Inkscape erstellt, wobei jedes Quadrat ausgewählt und so oft dupliziert wurde, wie die Anzahl der Unterschiede ( ctrl+ -) ich benötigte, um die darunter liegenden Objekte zu "schneiden". Diese Methode ist bei einer großen Menge von Objekten sehr schwer anzuwenden.

Jede Software (Adobe Illustrator, Befehlszeilentool ...) oder Methode, die dieses Problem löst, ist willkommen.

Ich glaube, Sie sind mit den Pfadoptionen von Inkscape auf dem richtigen Weg. Aber ziehen Sie einige der anderen Optionen in Betracht. "Divide" könnte der nützlichere Befehl sein.
Warum willst du das tun? Ich habe in meiner Antwort auf einen Grund hingewiesen, warum dies möglicherweise keine gute Idee ist, aber ich bin neugierig, ob Sie einen bestimmten Grund haben, aus dem Sie dies tun möchten, und ob es möglicherweise einen anderen Weg gibt, dies zu erreichen.
Ich verwende dieses SVG in einem interaktiven Viewer. Aus vielen Gründen ist die einzige zulässige Eigenschaft, die ich ändern kann, um "Hover" anzuzeigen, die Deckkraft. Aber das Objekt dahinter sollte durch diese Interaktion nicht aufgedeckt werden, dann muss ich SVGs ohne diese Bereiche dahinter verwenden.

Antworten (3)

Auf Illustrator:

Wenn es keine Transparenz gibt...

...wählen Sie die Formen aus und verwenden Sie dann die 'Trim'Schaltfläche im PathfinderFenster.

Geben Sie hier die Bildbeschreibung ein

Trim kann sich bei Objekten mit Transparenz seltsam verhalten, also ...

Wenn es Transparenz gibt ...

... wähle die Quadrate aus, dann Object > Flatten Transparencysetze 'Vektoren' auf 100%.

Bild, das es aus dieser anderen Frage veranschaulicht :

Geben Sie hier die Bildbeschreibung ein

Lässt manchmal Flatten Transparencydas untere Objekt ungeschnitten und sitzt unter allem anderen. Wenn dies passiert, können Sie, nachdem Flatten Transparencyalle Ihre Vektorformen eine Deckkraft von 100% haben, einfach diese untere Form und die Formen, die sie überlappen, auswählen und Trimwie oben verwenden.

Speichern Sie dann als SVG, wenn Sie SVG benötigen. Um das von Ilmari Karonen beschriebene Problem der übereinstimmenden Kanten zu vermeiden, können Sie Object > Transform > Transform Eachjedes Objekt so skalieren, dass es 100,5 % um seinen eigenen Mittelpunkt herum beträgt. Oder Sie könnten jedem Objekt einen sehr dünnen Strich mit einer eigenen Füllfarbe geben (wahrscheinlich ein besserer Ansatz, da idealerweise die kleine Überlappung für alles gleich sein sollte, nicht proportional zur Größe).

Ich werde dieses auch versuchen. Das erscheint vielversprechend. Ich bin es nicht sehr gewohnt, mit Illustrator zu arbeiten. Vielen Dank.
In Illustrator scheint das Trimmen für offene Pfade/Linien nicht richtig zu funktionieren, sie werden einfach entfernt

Ich habe eine Idee, obwohl ich sicher bin, dass es einen besseren Weg gibt.

Verwendung von Inkscape

  1. Platzieren Sie Ihre Objekte und stellen Sie sicher, dass die Farbe jedes Objekts so eingestellt ist, dass sich keine der gleichen Farbe berührt (verwenden Sie so wenig Farben wie möglich), Sie werden diese später ändern.
  2. Edit -> PreferencesWählen Sie am unteren Rand der Auswahl Bitmaps„Einstellen“ Resolution (256)und „Schließen“.
  3. Wählen Sie dann alle Ihre Objekte aus Edit -> Make a Bitmap copy(es dauert ein wenig, bis das Bild erstellt ist).
  4. Path -> Trace Bitmapnur in der Mode tapgesetzten Multiple scan: Scans (6, one for each color used plus one for background), Colors (on)Marke Remove background.
  5. In der Options tabMarkierung alles aufheben! Senden OK.
  6. Right clickWählen Sie in der Gruppe Ungroup.
  7. Wählen Sie nun alle Ihre Objekte aus und Path -> Break Apart.
  8. Und jetzt können Sie Ihre Farben ändern, um hübsch auszusehen!

Möglicherweise müssen Sie einige Streulinien löschen.

Achten Sie darauf, den Rücken einzustellen Resolution!. Und lassen Sie mich wissen, ob es für Sie funktioniert.

Es ist eine großartige und originelle Idee. Ich probiere es aus und berichte ob es passt. Vielen Dank! :)

Ein Problem bei dem Versuch, das zu tun, wonach Sie fragen, ist, dass Ihre Formen am Ende zusammenfallende Kanten haben. Beim Rendern erscheinen solche Kanten oft so, als gäbe es einen schmalen Spalt zwischen den Formen, wodurch der Hintergrund ein wenig durchscheinen kann.

Dafür gibt es zwei Gründe – Anti-Aliasing und Rundung:

  • Erstens verwenden die meisten SVG-Renderer eine Anti-Aliasing-Implementierung, bei der Pixel entlang der Kante einer Form als teilweise transparent gezeichnet werden, wobei der Grad der Transparenz dadurch bestimmt wird, wie viel von jedem Pixel die Form überlappt. Dies führt normalerweise zu hervorragenden Ergebnissen, aber es ist nicht perfekt, und eine Situation, die seine Ungenauigkeiten aufdecken kann, ist, wenn die Kanten zweier Formen zufällig genau zusammenfallen.

    Um zu sehen, warum dies passiert, stellen Sie sich ein Pixel vor, dessen eine Hälfte beispielsweise von einer roten Form bedeckt ist und genau die gegenüberliegende Hälfte von einer grünen Form bedeckt ist, wobei diese beiden Formen auf einem blauen Hintergrund gezeichnet sind. Bei einem „perfekten“ Renderer wäre dieses Pixel zu 50 % rot und zu 50 % grün, ohne dass Blau durchscheint. Was jedoch mit einem echten Renderer passiert, ist, dass er zuerst, sagen wir, die rote Form zeichnet, wodurch das Pixel zu 50 % rot und zu 50 % blau wird. Dann wird die grüne Form auf diesen Hintergrund gezeichnet, wodurch die Hälfte ihrer ursprünglichen Farbmischung durch Grün ersetzt wird und das Pixel zu 25 % rot, 50 % grün und 25 % blau bleibt.

  • Der andere Grund, warum zusammenfallende Kanten problematisch sein können, liegt darin, dass Renderer normalerweise Gleitkomma-Mathematik verwenden, die kleinen Rundungsfehlern unterliegt. Obwohl die Kanten genau zusammenfallen sollen , können Ungenauigkeiten bei der Berechnung daher ihren tatsächlichen Verlauf ein wenig ändern und eine winzige Lücke hinterlassen. (Dies ist ein größeres Problem beim 3D-Rendering, bei dem solche numerischen Probleme den Renderer im Unklaren darüber lassen können, welche von zwei deckungsgleichen Oberflächen vor der anderen gezeichnet werden soll, aber es kann sich auch auf das 2D-Rendering auswirken.)

Im Prinzip könnte das Anti-Aliasing-Problem vermieden werden, indem zunächst das gesamte Bild ohne Anti-Aliasing mit einer sehr hohen Auflösung (z Kanten. Dies wäre jedoch im Vergleich zum standardmäßigen SVG-Rendering mit Anti-Aliasing eine sehr teure Rendering-Methode, weshalb sie normalerweise nicht verwendet wird. Außerdem würde es Probleme mit numerischer Genauigkeit immer noch nicht vollständig lösen.

Daher besteht die praktische Lösung darin, zusammenfallende Kanten nach Möglichkeit zu vermeiden. Solange Sie sicherstellen, dass sich benachbarte Formen ausreichend überlappen, funktioniert der standardmäßige Anti-Aliasing-Algorithmus gut und Sie sehen keine offensichtlichen Lücken zwischen den Formen.

Ich weiß, dass es einige Nachteile gibt, aber sie sind im Vergleich kleinere Probleme. Danke für deine ausführliche Erklärung.