PerfectVector
Di Irene Kim7 min di lettura

SVG shape-rendering crispEdges: quando è utile?

Scopri quando crispEdges aiuta le forme sulla griglia di pixel, quando rende ruvide le curve e perché testarlo nel browser a due dimensioni è meglio che trattarlo come una correzione.

In questa pagina

Usa shape-rendering="crispEdges" quando un SVG ha bordi volutamente netti, perlopiù dritti, e un test alle dimensioni finali di visualizzazione appare migliore con questa impostazione. Lascia il valore predefinito auto quando la differenza è trascurabile. Sulla grafica curva, l'indicazione può rendere un bordo più ruvido. Cambia il modo in cui un renderer disegna le forme esistenti, non le forme stesse. La specifica SVG 2 la definisce un'indicazione e consente al renderer di ridurre l'antialiasing o allineare alcuni bordi ai pixel del dispositivo.

Questa distinzione conta se una piccola icona appare sfocata o un logo sembra seghettato dopo l'esportazione. crispEdges non può trasformare un PNG incorporato in tracciati, riparare un contorno interrotto o promettere gli stessi pixel in ogni browser. Prima di cambiare globalmente il file, confronta una forma rappresentativa con auto, crispEdges e geometricPrecision alle dimensioni che le persone vedranno realmente.

Scegli in base al bordo che ti serve
  • Grafica rettangolare su griglia di pixel: testa crispEdges sulle forme interessate, poi controlla sia dimensioni di uscita piccole sia più grandi.
  • Curve o scritte arrotondate: parti da auto; prova geometricPrecision se il renderer produce una differenza visibile.
  • Uno spazio tra forme adiacenti: esamina prima la geometria. Un'indicazione di rendering non può chiudere un vero foro.
  • Un PNG ridimensionato dentro un SVG: usa i controlli di ridimensionamento raster o ricostruisci la grafica come tracciati se l'obiettivo è la modificabilità.

Cosa chiede crispEdges al renderer

SVG ha quattro valori di shape-rendering. Sono priorità, non quattro formati di esportazione. Il valore predefinito auto lascia al renderer il bilanciamento tra velocità, contrasto dei bordi e precisione geometrica. crispEdges privilegia un forte contrasto dei bordi e può sopprimere l'antialiasing; geometricPrecision privilegia la fedeltà della geometria. La documentazione MDN dell'attributo SVG spiega che un renderer potrebbe trattare diversamente tutti i bordi, oppure soltanto quelli quasi orizzontali e quasi verticali. Non esiste un filtro di nitidezza obbligatorio.

ValoreCosa richiedePrimo test utile
autoIl renderer sceglie il compromessoRiferimento di base per ogni SVG
crispEdgesMaggiore contrasto sui bordi delle formeSimboli quadrati o dettagli a griglia
geometricPrecisionPosizionamento geometrico più fedeleCurve, diagonali e contorni sottili
optimizeSpeedPriorità alla velocità di renderingContesti specifici; non presumere un miglioramento visivo

Un attributo sullo SVG padre può essere ereditato dalle forme figlie, quindi applicarlo alla radice può influire su un cerchio che dovrebbe mantenere bordi regolari. Puoi invece intervenire su un singolo rettangolo o tracciato. Se si applicano sia l'attributo di presentazione SVG sia una dichiarazione CSS shape-rendering, la proprietà CSS ha la precedenza.

Abbiamo confrontato le stesse forme a due dimensioni

Abbiamo creato un simbolo rettangolare a griglia e un contorno curvo come forme SVG originali. Markup, riempimenti e viewBox erano identici nelle tre colonne; cambiava soltanto il valore shape-rendering. Ogni forma è stata renderizzata a 63 e 111 pixel CSS in Chromium con zoom del browser al 100%. La figura è una cattura dal browser di quel test locale, non un'illustrazione di un risultato immaginato.

Stessa geometria SVG, tre indicazioni, due dimensioni
Cattura Chromium che confronta lo stesso simbolo SVG rettangolare e contorno curvo con auto, crispEdges e geometricPrecision a dimensioni di visualizzazione di 63 e 111 pixel
Cattura originale Chromium con zoom del browser al 100%. Qui la differenza visiva è modesta; l'indicazione cambia il trattamento dei pixel, non i tracciati. Testa il tuo renderer e le dimensioni finali.

Nessuna delle modalità cambia i tracciati. In questa cattura le differenze sono troppo piccole per dichiarare un'impostazione vincente in generale. Il nome sembra quello di uno strumento di riparazione, ma l'effetto può essere lieve per una specifica forma, dimensione e renderer. Esamina la destinazione effettiva prima di mantenere l'attributo aggiuntivo.

Questo era un singolo rendering Chromium, non uno studio sulla compatibilità dei browser. Un visualizzatore PDF, un editor grafico o un browser con un'altra scala del dispositivo può rasterizzare diversamente gli stessi tracciati. La definizione SVG 2 lascia volutamente aperte le scelte di implementazione.

Provalo su una forma prima di applicarlo ovunque

Salva una copia dell'SVG, poi applica l'indicazione a una forma rappresentativa. Per esempio, applicala alla parte rettangolare di un'icona lasciando il dettaglio curvo su auto:

<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>

Apri il file nel visualizzatore previsto a una piccola dimensione da icona e a una dimensione più grande. Confrontalo con l'originale salvato, incluse diagonali e curve. Se applichi stili all'SVG inline con CSS, controlla se una regola sovrascrive l'attributo. Rimuovi l'indicazione quando non produce un miglioramento significativo; una proprietà superflua rende più difficile diagnosticare successive differenze di visualizzazione.

Abbina la correzione al sintomo reale

SintomoPrimo controlloPassaggio successivo migliore
Un simbolo quadrato appare poco nitido a una dimensioneConfronta auto e crispEdges a quella dimensioneMantieni l'indicazione soltanto se migliora l'uscita prevista
Un cerchio o una diagonale appare seghettatoControlla se crispEdges è ereditato o esportato su quella formaRimuovilo o confronta auto con geometricPrecision
Appare una linea sottile tra riempimenti che si toccanoConfronta zoom, sfondo e limiti dei tracciatiUsa la diagnosi delle fessure SVG; ripara la geometria soltanto se lo spazio è reale
Il file mostra ancora pixel quadrati quando viene ingranditoCerca un'immagine raster incorporataUsa la lista di controlli per SVG pixelati anziché cambiare shape-rendering

Per uno sprite PNG la cui griglia esatta di pixel è il disegno, mantenere il raster può essere la scelta più pulita. CSS image-rendering: pixelated controlla il campionamento di un'immagine ridimensionata; è una proprietà diversa da shape-rendering SVG. La guida alla conversione della pixel art spiega quando conservare la griglia, costruire tasselli vettoriali o smussare volutamente il contorno.

Quando è utile PerfectVector

Se l'unica sorgente è un piccolo PNG appiattito e ti servono tracciati modificabili, un'indicazione di rendering non può fornirli. PerfectVector è utile in quel passaggio precedente: converti il PNG in un candidato SVG, poi esamina le forme alle dimensioni necessarie. Controlla profilo, fori interni e piccoli dettagli prima di provare un'indicazione di visualizzazione sui tracciati selezionati. Un ricalco può reinterpretare i pixel come geometria; non può decidere se un gradino di pixel art debba diventare una curva regolare.

Conserva il PNG quando la griglia originale è la grafica finale. Se hai già un SVG pulito e soltanto la visualizzazione nel browser appare strana, correggi direttamente visualizzazione o geometria. Quando un PNG appiattito richiede davvero contorni modificabili, crea un candidato SVG con PerfectVector, esamina i tracciati e confronta il rendering nel browser alle dimensioni finali prima di aggiungere crispEdges.

FAQ

crispEdges elimina l'antialiasing da ogni forma SVG? No. Chiede al renderer di privilegiare il contrasto dei bordi. La specifica consente implementazioni diverse, incluse quelle che cambiano soltanto alcuni bordi quasi verticali o quasi orizzontali. Testa l'uscita nel visualizzatore che userai.

Dovrei mettere shape-rendering="crispEdges" sull'intero SVG? Soltanto se ogni forma figlia ne trae vantaggio. Un'indicazione alla radice può influire anche sui figli curvi. Applicare l'attributo a una sola forma rettangolare è più facile da valutare e rischia meno di rendere ruvida una curva.

crispEdges corregge fessure bianche o un PNG sfocato dentro un SVG? Non può chiudere uno spazio reale o sostituire pixel raster con tracciati vettoriali. Diagnostica prima la geometria della fessura. Per un PNG ridimensionato, usa un metodo di ridimensionamento raster appropriato oppure crea tracciati vettoriali modificabili se è questa l'esigenza reale.

Fonti

  1. W3C — Proprietà shape-rendering SVG 2 — Definisce i quattro valori come indicazioni al renderer e spiega i compromessi consentiti.
  2. MDN — Attributo shape-rendering SVG — Documenta forme SVG interessate, ereditarietà e priorità del CSS.
  3. MDN — Proprietà CSS shape-rendering — Descrive il comportamento della proprietà e perché il rendering delle curve può variare.
  4. MDN — Proprietà CSS image-rendering — Distingue il ridimensionamento dei pixel raster dal rendering dei bordi di forme vettoriali.

Altro dal blog

Riparti da un SVG più pulito
e facile da modificare