PerfectVector
Von Irene Kim7 Min. Lesezeit

SVG shape-rendering crispEdges: Wann hilft es?

Sieh, wann SVG crispEdges bei Pixelraster-Motiven hilft, wann es Kurven rauer macht und warum Browser-Tests in zwei Größen besser sind als ein pauschaler Fix.

Auf dieser Seite

Verwende shape-rendering="crispEdges", wenn ein SVG bewusst harte, überwiegend gerade Kanten hat und ein Test in der endgültigen Darstellungsgröße damit besser aussieht. Behalte den Standard auto, wenn der Unterschied unerheblich ist. Bei gekrümmten Grafiken kann der Hinweis Kanten rauer wirken lassen. Er ändert, wie ein Renderer vorhandene Formen zeichnet, nicht die Formen selbst. Die SVG-2-Spezifikation bezeichnet ihn als Hinweis und erlaubt dem Renderer, Kantenglättung zu reduzieren oder manche Kanten an Gerätepixeln auszurichten.

Dieser Unterschied zählt, wenn ein winziges Icon unscharf aussieht oder ein Logo nach dem Export gezackt wirkt. crispEdges kann weder ein eingebettetes PNG in Pfade verwandeln noch eine beschädigte Kontur reparieren noch dieselben Pixel in jedem Browser versprechen. Vergleiche vor einer globalen Dateiänderung eine repräsentative Form mit auto, crispEdges und geometricPrecision in den Größen, die Menschen tatsächlich sehen werden.

Wähle nach der benötigten Kante
  • Rechteckige Pixelraster-Grafik: Teste crispEdges auf den betreffenden Formen und prüfe kleine sowie größere Ausgabegrößen.
  • Kurven oder runde Schrift: Beginne mit auto; probiere geometricPrecision, wenn der Renderer einen sichtbaren Unterschied erzeugt.
  • Lücke zwischen benachbarten Formen: Prüfe zuerst die Geometrie. Ein Rendering-Hinweis kann kein echtes Loch schließen.
  • Skaliertes PNG innerhalb eines SVG: Verwende Raster-Skalierungseinstellungen oder baue die Grafik als Pfade neu auf, wenn Bearbeitbarkeit das Ziel ist.

Was crispEdges vom Renderer verlangt

SVG hat vier shape-rendering-Werte. Sie sind Prioritäten, keine vier Exportformate. Beim Standard auto wägt der Renderer Geschwindigkeit, Kantenkontrast und geometrische Genauigkeit ab. crispEdges bevorzugt starken Kantenkontrast und kann Kantenglättung unterdrücken; geometricPrecision bevorzugt geometrische Treue. Die SVG-Attributreferenz von MDN erklärt, dass ein Renderer möglicherweise alle Kanten oder nur fast waagerechte und senkrechte Kanten anders behandelt. Es gibt keinen vorgeschriebenen Schärfefilter.

WertWas er anfordertSinnvoller erster Test
autoRenderer wählt die AbwägungAusgangspunkt für jedes SVG
crispEdgesMehr Kontrast an FormkantenQuadratische Motive oder rasterartige Details
geometricPrecisionGenauere geometrische PlatzierungKurven, Diagonalen und feine Konturen
optimizeSpeedPriorität für Rendering-GeschwindigkeitSpezielle Kontexte; keinen visuellen Gewinn voraussetzen

Ein Attribut auf einem übergeordneten SVG kann an seine Kindformen vererbt werden. Am Wurzelelement angewendet kann es daher einen Kreis beeinflussen, der glatt bleiben soll. Du kannst stattdessen ein einzelnes Rechteck oder einen Pfad ansprechen. Wenn sowohl das SVG-Präsentationsattribut als auch eine CSS-Deklaration für shape-rendering gelten, hat die CSS-Eigenschaft Vorrang.

Wir haben dieselben Formen in zwei Größen verglichen

Wir erstellten ein rechteckiges Rastermotiv und eine gekrümmte Kontur als eigene SVG-Formen. Markup, Füllungen und viewBox waren in allen drei Spalten identisch; nur der shape-rendering-Wert änderte sich. Jede Form wurde in Chromium bei 100 % Browser-Zoom mit 63 und 111 CSS-Pixeln gerendert. Die Abbildung ist eine Browser-Aufnahme dieses lokalen Tests, keine Illustration eines erdachten Ergebnisses.

Gleiche SVG-Geometrie, drei Hinweise, zwei Größen
Chromium-Aufnahme desselben rechteckigen SVG-Motivs und derselben gekrümmten Kontur mit auto, crispEdges und geometricPrecision in Darstellungsgrößen von 63 und 111 Pixeln
Originale Chromium-Aufnahme bei 100 % Browser-Zoom. Der sichtbare Unterschied ist hier gering; der Hinweis ändert die Pixelbehandlung, nicht die Pfade. Teste deinen eigenen Renderer und die endgültige Größe.

Keiner der Modi ändert die Pfade. In dieser Aufnahme sind die Unterschiede zu klein, um eine Einstellung zum allgemeinen Sieger zu erklären. Der Name klingt nach einem Reparaturwerkzeug, doch für eine bestimmte Form, Größe und einen bestimmten Renderer kann der Effekt gering sein. Prüfe die tatsächliche Zielausgabe, bevor du das zusätzliche Attribut beibehältst.

Dies war ein einzelnes Chromium-Rendering, keine Studie zur Browser-Kompatibilität. Ein PDF-Betrachter, Designeditor oder Browser mit anderem Geräteskalierungsfaktor kann dieselben Pfade anders rasterisieren. Die SVG-2-Definition lässt Implementierungsentscheidungen bewusst offen.

Teste es an einer Form, bevor du es überall anwendest

Speichere eine Kopie des SVG und setze den Hinweis dann auf eine repräsentative Form. Wende ihn beispielsweise auf den rechteckigen Teil eines Icons an, während das gekrümmte Detail auf auto bleibt:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
  <rect x="4" y="4" width="16" height="8" fill="#154b67"
        shape-rendering="crispEdges" />
  <path d="M5 18 Q12 11 19 18" fill="none" stroke="#23a6a1"
        stroke-width="2" shape-rendering="auto" />
</svg>

Öffne die Datei im vorgesehenen Betrachter in einer kleinen Icon-Größe und einer größeren Größe. Vergleiche sie mit dem gespeicherten Original, einschließlich Diagonalen und Kurven. Wenn du Inline-SVG mit CSS gestaltest, suche nach einer Regel, die dein Attribut überschreibt. Entferne den Hinweis, wenn er keine wesentliche Verbesserung bringt; eine unnötige Eigenschaft erschwert später die Diagnose von Darstellungsunterschieden.

Passe die Lösung an das tatsächliche Symptom an

SymptomZuerst prüfenBesserer nächster Schritt
Ein quadratisches Motiv wirkt in einer Größe weichauto und crispEdges in dieser Größe vergleichenHinweis nur behalten, wenn er die beabsichtigte Ausgabe verbessert
Ein Kreis oder eine Diagonale wirkt gezacktPrüfen, ob crispEdges für diese Form vererbt oder exportiert wirdEntfernen oder auto mit geometricPrecision vergleichen
Zwischen aneinandergrenzenden Füllungen erscheint eine dünne LinieZoom, Hintergrund und Pfadgrenzen vergleichenSVG-Nahtdiagnose verwenden; Geometrie nur bei echter Lücke reparieren
Die Datei zeigt beim Vergrößern weiterhin quadratische PixelNach eingebettetem Rasterbild suchenCheckliste für verpixelte SVGs verwenden, statt shape-rendering zu ändern

Für ein PNG-Sprite, dessen exaktes Pixelraster das Design ausmacht, kann es am saubersten sein, das Rasterbild zu behalten. CSS image-rendering: pixelated steuert die Abtastung eines skalierten Bildes; das ist eine andere Eigenschaft als SVG-shape-rendering. Der Leitfaden zur Pixel-Art-Konvertierung erklärt, wann du das Raster erhalten, Vektorkacheln bauen oder die Kontur bewusst glätten solltest.

Wann PerfectVector passt

Wenn deine einzige Quelle ein kleines, auf eine Ebene reduziertes PNG ist und du bearbeitbare Pfade brauchst, kann ein Rendering-Hinweis sie nicht liefern. PerfectVector ist für diesen früheren Schritt nützlich: Konvertiere das PNG in einen SVG-Kandidaten und prüfe die Formen anschließend in der benötigten Größe. Kontrolliere Umriss, innere Löcher und kleine Details, bevor du einen Darstellungshinweis auf ausgewählten Pfaden ausprobierst. Eine Nachzeichnung kann Pixel als Geometrie neu interpretieren; sie kann nicht entscheiden, ob eine Pixel-Art-Treppenstufe eine glatte Kurve werden soll.

Behalte das PNG, wenn das ursprüngliche Raster die fertige Grafik ist. Wenn du bereits ein sauberes SVG hast und nur seine Browser-Darstellung seltsam aussieht, korrigiere Darstellung oder Geometrie direkt. Wenn ein reduziertes PNG tatsächlich bearbeitbare Konturen braucht, erstelle mit PerfectVector einen SVG-Kandidaten, prüfe seine Pfade und vergleiche das Browser-Rendering in der endgültigen Größe, bevor du crispEdges hinzufügst.

FAQ

Entfernt crispEdges die Kantenglättung von jeder SVG-Form? Nein. Es fordert den Renderer auf, Kantenkontrast zu bevorzugen. Die Spezifikation erlaubt unterschiedliche Implementierungen, auch solche, die nur manche fast senkrechten oder waagerechten Kanten ändern. Teste die Ausgabe in dem Betrachter, den du verwenden wirst.

Sollte ich shape-rendering="crispEdges" auf das gesamte SVG setzen? Nur wenn jede Kindform davon profitiert. Ein Hinweis auf Wurzelebene kann auch gekrümmte Kindelemente beeinflussen. Das Attribut auf eine einzelne rechteckige Form anzuwenden lässt sich leichter beurteilen und macht eine Kurve seltener rauer.

Behebt crispEdges weiße Nähte oder ein unscharfes PNG im SVG? Es kann keine echte Lücke schließen oder Rasterpixel durch Vektorpfade ersetzen. Untersuche zuerst die Geometrie der Naht. Bei einem skalierten PNG verwendest du eine geeignete Raster-Skalierungsmethode oder erstellst bearbeitbare Vektorpfade, wenn das der eigentliche Bedarf ist.

Quellen

  1. W3C — SVG-2-Eigenschaft shape-rendering — Definiert die vier Werte als Renderer-Hinweise und erklärt ihre zulässigen Abwägungen.
  2. MDN — SVG-Attribut shape-rendering — Dokumentiert anwendbare SVG-Formen, Vererbung und CSS-Vorrang.
  3. MDN — CSS-Eigenschaft shape-rendering — Beschreibt das Verhalten der Eigenschaft und warum Kurvendarstellung variieren kann.
  4. MDN — CSS-Eigenschaft image-rendering — Unterscheidet die Skalierung von Rasterpixeln vom Rendern der Kanten einer Vektorform.

Mehr aus dem Blog

Starte mit einer sauberen SVG,
die leichter zu bearbeiten ist