Skip to content
Technology

Upscaling delle immagini web per display Retina: guida per sviluppatori

I display Retina e ad alta risoluzione richiedono immagini a risoluzione maggiore. Scopri come l'upscaling IA aiuta gli sviluppatori web a offrire immagini nitide a tutti gli utenti.

Robin Monteiro4 febbraio 202610 ottobre 202611 min
Use this article with an AI assistant:
.md
Upscaling delle immagini web per display Retina: guida per sviluppatori
R
Robin Monteiro

Founder of VectoSolve

Self-taught developer, founder and sole developer of VectoSolve since 2024. He builds the conversion engine and the cutting, embroidery and 3D printing exports.

How this article was made: drafted with AI assistance, then edited and fact-checked before publication. About the author

Image vectorizationCutting machine filesEmbroidery filesSVG
Free previewNo signupFull-quality output

Key Takeaways

  • I display Retina moderni hanno una densità di 2x–3x, il che significa che un'immagine CSS da 300px necessita di un file sorgente da 600–900px per apparire nitida
  • Gli attributi HTML srcset e sizes permettono ai browser di scegliere automaticamente la risoluzione ottimale, risparmiando banda sugli schermi a basso DPI
  • SVG è sempre preferibile per icone, loghi e illustrazioni geometriche perché scala all'infinito senza perdita di qualità
  • Un pipeline di ottimizzazione immagini (ridimensionare → comprimere → convertire in WebP/AVIF → servire via CDN) può ridurre il peso della pagina del 60–80%
  • Lighthouse penalizza pesantemente le immagini sovradimensionate; immagini responsive correttamente dimensionate possono aumentare il punteggio Performance di 10–20 punti

Se avete mai zoomato su un sito web dal vostro MacBook Pro o iPhone e notato che alcune immagini appaiono nitide mentre altre sembrano sfocate, avete assistito al problema dei display Retina in prima persona. Come sviluppatori frontend, consegniamo pixel — e nel 2025, la maggior parte di questi pixel atterra su schermi con device pixel ratio ben superiori a 1.0.

Questa guida copre tutto ciò che dovete sapere: cosa significa realmente il device pixel ratio, come servire l'immagine giusta allo schermo giusto, quando saltare il raster e usare SVG, e come costruire un pipeline di ottimizzazione che mantiene il vostro punteggio Lighthouse nel verde.

Confronto tra immagini web standard e qualità Retina affiancate
Immagine standard 1x (sinistra) vs immagine Retina 2x (destra) — la differenza è immediatamente visibile su schermi ad alta risoluzione

Capire il Device Pixel Ratio (DPR)

Il Device Pixel Ratio è la relazione tra i pixel CSS (le unità logiche che scriviamo nei nostri fogli di stile) e i pixel fisici del dispositivo (i punti hardware effettivi sullo schermo). Un DPR di 2 significa che ogni singolo pixel CSS corrisponde a una griglia 2×2 di pixel fisici — quattro volte più punti.

Valori DPR comuni per dispositivo

DispositivoDPRRisoluzione CSSRisoluzione fisica
Monitor desktop standard1.01920×10801920×1080
MacBook Pro 14" (2024)2.01512×9823024×1964
iPhone 15 Pro3.0393×8521179×2556
Samsung Galaxy S242.625384×8541008×2244
iPad Pro 12.9"2.01024×13662048×2732

Come verificare il proprio DPR: Aprite la console del browser e digitate window.devicePixelRatio. Sulla maggior parte dei laptop e telefoni moderni, vedrete un valore tra 2.0 e 3.0. Questo singolo numero determina se le vostre immagini appaiono ultra-nitide o deludentemente sfocate.

L'implicazione pratica è semplice ma profonda: se mostrate un <img> a 400×300 pixel CSS su uno schermo 2x, il browser stira un'immagine sorgente 400×300 su 800×600 pixel fisici. Il risultato è quell'aspetto "morbido" caratteristico — tecnicamente corretto, ma visibilmente inferiore a un'immagine nativamente nitida.

La matematica dietro le immagini Retina-Ready

Per servire un'immagine pixel-perfect a qualsiasi DPR, moltiplicate le dimensioni di visualizzazione CSS per il DPR:

Larghezza sorgente  = Larghezza visualizzazione CSS  × DPR
Altezza sorgente = Altezza visualizzazione CSS × DPR

Per un banner hero visualizzato a 1200×600 pixel CSS:

  • Schermo 1x: sorgente 1200×600px (mappatura 1:1)
  • Schermo 2x: sorgente 2400×1200px (4× il numero di pixel)
  • Schermo 3x: sorgente 3600×1800px (9× il numero di pixel)

Warning: Non servite ciecamente immagini 3x a tutti. Un'immagine hero 3600×1800 può facilmente pesare 800KB+ anche dopo la compressione. L'attributo srcset esiste specificamente per evitare questa penalità di banda sugli schermi a basso DPI. Fornite sempre risoluzioni multiple e lasciate scegliere al browser.


Immagini responsive con srcset e sizes

L'attributo HTML srcset è la pietra angolare delle immagini responsive Retina-ready. Fornisce al browser un menu di file immagine a diverse risoluzioni, e il browser seleziona il più appropriato in base al DPR del dispositivo e alla dimensione del viewport.

srcset base con descrittori di larghezza

html
<img
  src="/images/hero-800w.jpg"
  srcset="
    /images/hero-400w.jpg   400w,
    /images/hero-800w.jpg   800w,
    /images/hero-1200w.jpg 1200w,
    /images/hero-1600w.jpg 1600w,
    /images/hero-2400w.jpg 2400w
  "
  sizes="
    (max-width: 640px) 100vw,
    (max-width: 1024px) 75vw,
    50vw
  "
  alt="Immagine hero presentazione prodotto"
  width="1200"
  height="600"
  loading="lazy"
  decoding="async"
/>

Analizziamo cosa sta succedendo:

  1. srcset elenca ogni file immagine seguito dalla sua larghezza intrinseca (il descrittore w). Il browser ora sa esattamente quanti pixel contiene ogni file.
  2. sizes indica al browser quanto sarà larga l'immagine renderizzata ai vari breakpoint. Su schermi fino a 640px di larghezza, l'immagine riempie l'intero viewport (100vw). Su tablet, 75%. Su desktop, 50%.
  3. Il browser combina sizes con devicePixelRatio per calcolare la larghezza sorgente ideale, poi sceglie la corrispondenza più vicina da srcset.

Pro Tip: Consiglio pro: Includete sempre gli attributi width e height nei vostri tag <img>. Questo permette al browser di calcolare il rapporto d'aspetto prima del caricamento dell'immagine, prevenendo il Cumulative Layout Shift (CLS) — un Core Web Vital che impatta direttamente il vostro ranking SEO.

Usare srcset con descrittori di densità pixel

Per immagini a dimensione fissa (come avatar o icone), potete usare il descrittore x:

html
<!-- Avatar a dimensione fissa: sempre 48×48 pixel CSS -->
<img
  src="/avatars/user-48.png"
  srcset="
    /avatars/user-48.png  1x,
    /avatars/user-96.png  2x,
    /avatars/user-144.png 3x
  "
  alt="Avatar utente"
  width="48"
  height="48"
/>

Questo approccio è più pulito per elementi a dimensione fissa perché non servono l'attributo sizes. Il browser semplicemente abbina il descrittore al suo DPR.

L'elemento <picture> per la direzione artistica

A volte servono più del semplice cambio di risoluzione — servono ritagli o formati completamente diversi per contesti diversi. È qui che entra <picture>:

html
<picture>
  <!-- AVIF per browser compatibili (migliore compressione) -->
  <source
    type="image/avif"
    srcset="
      /images/hero-800w.avif   800w,
      /images/hero-1600w.avif 1600w,
      /images/hero-2400w.avif 2400w
    "
    sizes="(max-width: 1024px) 100vw, 50vw"
  />
  <!-- WebP come fallback -->
  <source
    type="image/webp"
    srcset="
      /images/hero-800w.png   800w,
      /images/hero-1600w.png 1600w,
      /images/hero-2400w.png 2400w
    "
    sizes="(max-width: 1024px) 100vw, 50vw"
  />
  <!-- JPEG come fallback per browser datati -->
  <img
    src="/images/hero-800w.jpg"
    srcset="
      /images/hero-800w.jpg   800w,
      /images/hero-1600w.jpg 1600w,
      /images/hero-2400w.jpg 2400w
    "
    sizes="(max-width: 1024px) 100vw, 50vw"
    alt="Presentazione prodotto"
    width="1200"
    height="600"
    loading="lazy"
  />
</picture>
"

L'immagine più veloce è quella perfettamente dimensionata per il dispositivo che la visualizza — non un pixel in più, non un pixel in meno.

— Addy Osmani, Engineering Manager presso Google

Quando SVG è meglio dell'upscaling

Prima di investire tempo a generare varianti raster 2x e 3x, chiedetevi: questa immagine deve davvero essere raster? Per molti elementi di interfaccia comuni, SVG è la scelta oggettivamente superiore.

Pattern di design SVG responsive per diverse dimensioni schermo
Gli SVG scalano perfettamente a qualsiasi risoluzione senza perdita di qualità — ideali per icone, loghi e visualizzazioni dati

SVG vs Raster: un framework decisionale

CriterioUsare SVGUsare Raster (con srcset)
Icone ed elementi di interfacciaSempreMai
Loghi e marchiSempreSolo se estremamente complessi
Grafici e visualizzazioniPreferibileSolo per render molto complessi
Illustrazioni (flat/geometriche)PreferibileSe servono texture fotorealistiche
FotografiaMaiSempre
ScreenshotMaiSempre
Gradienti/filtri complessiA voltePreferibile per effetti pesanti

Confronto dimensioni file: Un'icona tipica come PNG 3x può pesare 5–15KB. La stessa icona come SVG ottimizzato è spesso 500 byte a 2KB — e appare perfetta su ogni DPR, inclusi futuri display 4x e 5x. SVG è il formato definitivo a prova di Retina per contenuto vettoriale.

SVG inline per massime prestazioni

Per icone UI critiche, SVG inline elimina completamente una richiesta HTTP:

html
<!-- Icona SVG inline — zero richieste di rete, rendering istantaneo -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"
     width="24" height="24" fill="none" stroke="currentColor"
     stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <circle cx="11" cy="11" r="8"/>
  <path d="M21 21l-4.35-4.35"/>
</svg>

Poiché SVG usa currentColor, l'icona eredita automaticamente il colore del testo dell'elemento genitore — perfetto per la tematizzazione e il supporto dark mode.


A Full Year of Conversions for $49

Starter Annual: 25 conversions every month, $49 for the whole year. That is about $4.08 a month · Cancel anytime

Get the Annual Deal

Costruire un pipeline di ottimizzazione immagini

Servire immagini Retina-ready senza un pipeline di ottimizzazione è come comprare un'auto sportiva e riempirla di carburante scadente. Serve un processo sistematico che gestisce ridimensionamento, compressione, conversione di formato e consegna.

Il pipeline a quattro fasi

Fase 1: Preparazione delle sorgenti

Partite sempre dalla sorgente di massima qualità disponibile. Per la fotografia, significa il file originale della fotocamera o un'esportazione lossless. Per gli asset di design, esportate da Figma o Sketch a 3x o superiore.

Fase 2: Generazione multi-risoluzione

Generate varianti ai breakpoint standard. Un set comune è 400w, 800w, 1200w, 1600w e 2400w:

css
/* Esempio: CSS per un hero responsive con background-image */
.hero {
  background-image: url("/images/hero-1200w.png");
  background-size: cover;
  background-position: center;
}

@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
  .hero {
    background-image: url("/images/hero-2400w.png");
  }
}

/* Per le immagini di sfondo, le media query sono l'unico modo
   per servire varianti adattate al DPR */

Fase 3: Conversione formato e compressione

Convertite ogni variante nei formati moderni. L'ordine di priorità è:

  1. AVIF — Migliore compressione (30–50% più piccolo di WebP), supporto browser in crescita
  2. WebP — Eccellente compressione, supporto browser quasi universale
  3. JPEG/PNG — Fallback per browser datati

Pro Tip: Automazione con Sharp (Node.js): La libreria Sharp è lo standard per l'elaborazione immagini lato server. Ecco un pattern pratico di build script:

html
<!-- Il risultato nel vostro HTML dopo l'elaborazione del pipeline -->
<picture>
  <source type="image/avif" srcset="/img/photo.avif" />
  <source type="image/webp" srcset="/img/photo.png" />
  <img src="/img/photo.jpg" alt="Foto ottimizzata" />
</picture>

Fase 4: Consegna via CDN

Servite le immagini da un CDN con cache edge. Molti CDN (Cloudflare, Vercel, Imgix) offrono trasformazione immagini al volo, che può sostituire completamente le fasi 2 e 3:

html
<!-- Cloudflare Image Resizing -->
<img
  src="/cdn-cgi/image/width=800,format=auto,quality=80/images/hero.jpg"
  srcset="
    /cdn-cgi/image/width=400,format=auto,quality=80/images/hero.jpg   400w,
    /cdn-cgi/image/width=800,format=auto,quality=80/images/hero.jpg   800w,
    /cdn-cgi/image/width=1200,format=auto,quality=80/images/hero.jpg 1200w,
    /cdn-cgi/image/width=2400,format=auto,quality=80/images/hero.jpg 2400w
  "
  sizes="(max-width: 768px) 100vw, 50vw"
  alt="Hero ottimizzato via CDN"
/>
Tecniche di ottimizzazione SVG che mostrano prima e dopo le dimensioni file
Un pipeline di immagini ben ottimizzato può ridurre il carico totale di immagini del 60–80% mantenendo la nitidezza Retina

Componente Image di Next.js: l'approccio moderno

Se lavorate su un progetto Next.js, il componente <Image> integrato gestisce automaticamente la maggior parte delle preoccupazioni Retina. È il più grande miglioramento di qualità di vita per la gestione immagini in React.

Uso base

html
<!-- Next.js genera automaticamente srcset con
     risoluzioni multiple e serve WebP/AVIF -->
<img
  src="/_next/image?url=%2Fimages%2Fhero.jpg&w=1200&q=75"
  srcset="
    /_next/image?url=%2Fimages%2Fhero.jpg&w=640&q=75   640w,
    /_next/image?url=%2Fimages%2Fhero.jpg&w=750&q=75   750w,
    /_next/image?url=%2Fimages%2Fhero.jpg&w=828&q=75   828w,
    /_next/image?url=%2Fimages%2Fhero.jpg&w=1080&q=75 1080w,
    /_next/image?url=%2Fimages%2Fhero.jpg&w=1200&q=75 1200w
  "
  sizes="100vw"
  alt="Immagine hero"
  loading="lazy"
  decoding="async"
/>

Configurazione avanzata

Personalizzate le dimensioni generate in next.config.js:

html
<!-- Cosa produce Next.js Image per un hero responsive -->
<!-- Con la prop priority per immagini LCP above-the-fold -->
<img
  src="/_next/image?url=%2Fhero.jpg&w=3840&q=80"
  srcset="
    /_next/image?url=%2Fhero.jpg&w=640&q=80    640w,
    /_next/image?url=%2Fhero.jpg&w=1080&q=80  1080w,
    /_next/image?url=%2Fhero.jpg&w=1920&q=80  1920w,
    /_next/image?url=%2Fhero.jpg&w=3840&q=80  3840w
  "
  sizes="100vw"
  alt="Hero above-the-fold"
  fetchpriority="high"
  decoding="async"
  style="color:transparent"
/>

Pro Tip: Best practice di Next.js Image:

  • Usate la prop priority per la vostra immagine LCP (Largest Contentful Paint) — disattiva il lazy loading e aggiunge fetchpriority="high"
  • Impostate quality={80} per fotografia e quality={90} per screenshot UI dove la chiarezza del testo conta
  • Usate placeholder="blur" con blurDataURL per un'esperienza di caricamento curata
  • Per import statici, Next.js rileva automaticamente larghezza, altezza e genera placeholder sfocati

Considerazioni sulle prestazioni e Core Web Vitals

Le immagini sono tipicamente gli asset più pesanti di qualsiasi pagina web, spesso rappresentando il 50–70% del peso totale. Gestire correttamente le immagini Retina ha un impatto diretto e misurabile sui vostri Core Web Vitals.

Impatto sulle metriche chiave

MetricaCome le immagini la influenzanoStrategia di ottimizzazione
LCP (Largest Contentful Paint)Le immagini hero sono spesso l'elemento LCPPrecaricare hero, usare caricamento prioritario, servire da CDN
CLS (Cumulative Layout Shift)Immagini senza dimensioni causano spostamenti di layoutSempre impostare width/height o usare aspect-ratio nel CSS
INP (Interaction to Next Paint)Immagini grandi bloccano il main thread durante la decodificaUsare decoding="async" e lazy loading
TTFB (Time to First Byte)Immagini non ottimizzate sovraccaricano la banda del serverCache CDN, formati moderni (AVIF/WebP)

Audit Lighthouse: "Immagini correttamente dimensionate"

Lighthouse segnala immagini il cui file servito è significativamente più grande della dimensione di visualizzazione. Come superare questo audit costantemente:

  1. Non servite mai una singola immagine sovradimensionata. Usate srcset per fornire dimensioni appropriate.
  2. Puntate al massimo 2x per la maggior parte dei casi. Servire immagini 3x offre ritorni visivi decrescenti aumentando significativamente la dimensione del file. La maggior parte degli utenti non percepisce la differenza tra 2x e 3x su schermi sotto i 27 pollici.
  3. Comprimete aggressivamente. WebP a qualità 80 è visivamente indistinguibile da JPEG a qualità 95 per la maggior parte del contenuto fotografico, a circa la metà della dimensione.
"

Abbiamo scoperto che passando da PNG non ottimizzati a WebP correttamente dimensionato con srcset abbiamo ridotto il carico immagini del 73% e migliorato il nostro punteggio Lighthouse Performance da 62 a 94.

— Shopify Engineering Blog

Strategia di lazy loading

Non tutte le immagini devono caricarsi immediatamente. Usate il lazy loading nativo per contenuto below-the-fold:

html
<!-- Above the fold: caricamento immediato con alta priorità -->
<img
  src="/hero-800w.png"
  srcset="/hero-800w.png 800w, /hero-1600w.png 1600w"
  sizes="100vw"
  alt="Banner hero"
  fetchpriority="high"
  decoding="async"
/>

<!-- Below the fold: lazy load -->
<img
  src="/feature-800w.png"
  srcset="/feature-800w.png 800w, /feature-1600w.png 1600w"
  sizes="(max-width: 768px) 100vw, 50vw"
  alt="Screenshot funzionalità"
  loading="lazy"
  decoding="async"
  width="800"
  height="450"
/>

Warning: Non fate mai lazy-load della vostra immagine LCP. L'attributo loading="lazy" sulla vostra immagine più grande above-the-fold è uno degli anti-pattern di prestazioni più comuni. Lighthouse lo segnalerà specificamente. Usate fetchpriority="high" per la vostra immagine hero.


Free SVG Tools for Crafters

Design Checker · Color Separator · Mat Preview · Offset Generator · Text to SVG

Check Your SVG Free

Checklist delle best practice per immagini responsive

Dopo aver lavorato su centinaia di audit di ottimizzazione immagini, ecco la checklist essenziale che seguo su ogni progetto:

Per ogni immagine del vostro sito

  • Impostate attributi width e height espliciti per prevenire CLS
  • Usate loading="lazy" per immagini below-the-fold e fetchpriority="high" per l'immagine LCP
  • Aggiungete testo alt significativo per accessibilità e SEO
  • Usate decoding="async" per non bloccare il main thread

Per contenuto fotografico

  • Generate almeno 4–5 varianti srcset (es. 400w, 800w, 1200w, 1600w, 2400w)
  • Servite AVIF con fallback WebP tramite <picture> o auto-formato CDN
  • Comprimete a qualità 75–85 per WebP (visivamente lossless per la maggior parte dei contenuti)
  • Limitate la risoluzione massima a 2x della dimensione di visualizzazione più grande attesa (es. 2400w per un container da 1200px)

Per icone ed elementi di interfaccia

  • Usate SVG ovunque possibile — è indipendente dalla risoluzione e minuscolo
  • Incorporate le icone SVG critiche inline per eliminare richieste HTTP
  • Usate uno sprite o sistema di simboli per icone ripetute
  • Applicate fill="currentColor" per adattamento automatico al tema

Per immagini di sfondo nel CSS

  • Usate image-set() per sfondi adattati al DPR (l'equivalente CSS di srcset):
css
.hero-bg {
  /* Fallback per browser datati */
  background-image: url("/images/hero-1x.png");

  /* Sintassi moderna adattata al DPR */
  background-image: image-set(
    url("/images/hero-1x.png") 1x,
    url("/images/hero-2x.png") 2x
  );
  background-size: cover;
  background-position: center;
}

Conclusione

Le immagini Retina-ready non sono un lusso — sono un'aspettativa di base nel web moderno. La buona notizia è che gli strumenti e gli standard sono maturi: srcset e sizes danno ai browser tutto ciò che serve per prendere decisioni intelligenti, SVG elimina completamente il problema DPR per contenuto vettoriale, e framework come Next.js automatizzano il lavoro pesante.

La chiave è costruire un pipeline sistematico: partite da sorgenti di alta qualità, generate risoluzioni multiple, comprimete in formati moderni, e lasciate che il browser (o il CDN) serva l'asset giusto al dispositivo giusto. Fatelo bene, e consegnerete pagine ultra-nitide su ogni schermo mantenendo il vostro punteggio Lighthouse saldamente nel verde.

VectoSolve può aiutarvi. I nostri strumenti di ottimizzazione SVG e elaborazione immagini sono progettati per integrarsi perfettamente nel pipeline descritto sopra. Che stiate convertendo asset raster in SVG puliti o ottimizzando grafiche vettoriali esistenti, abbiamo creato gli strumenti per rendere le immagini Retina-ready senza sforzo.


Tipo di displayDensità pixelMoltiplicatore immagine necessarioEsempio
Standard (1x)~96 PPI1x300px CSS = immagine 300px
Retina / HiDPI (2x)~192 PPI2x300px CSS = immagine 600px
Super Retina (3x)~288+ PPI3x300px CSS = immagine 900px
Monitor 4K UHD~163 PPI (a 27")1.5x–2xVaria in base all'impostazione di scala
iMac 5K~218 PPI2x300px CSS = immagine 600px

Fonti e letture consigliate

Tags:
sviluppo web
retina
immagini responsive
srcset
alta risoluzione
Share:

Try VectoSolve Now

Convert your images to high-quality SVG vectors with AI

AI-Powered Vectorization

Ready to vectorize your images?

Convert your PNG, JPG, and other images to high-quality, scalable SVG vectors in seconds.