Come disattivare le immagini -scaled di WordPress (big_image_size_threshold)
Risolvi le immagini WordPress poco nitide alzando o togliendo il limite di 2560px con il filtro big_image_size_threshold, e scopri perché ricaricare i file è il passaggio che tutti saltano.
Pubblicato
Aggiungi un filtro su big_image_size_threshold che restituisce false e WordPress smette di creare copie -scaled al caricamento. Restituisci invece un numero e alzi il limite anziché rimuoverlo. Entrambi vanno in functions.php o in un piccolo mu-plugin, ed entrambi agiscono solo sui caricamenti effettuati dopo l’attivazione del filtro.
// Disattiva del tutto il limite — nessuna copia -scaled.
add_filter( 'big_image_size_threshold', '__return_false' );
// Oppure alzalo soltanto. Lato più lungo, in pixel.
add_filter( 'big_image_size_threshold', function () {
return 3840;
} );
Cosa sta facendo WordPress in realtà
Da WordPress 5.3 in poi, ogni caricamento viene misurato sul lato più lungo. Se quel lato supera big_image_size_threshold — 2560px di default — WordPress ricomprime l’immagine fino a quel limite, la salva come your-photo-scaled.jpg e riscrive i metadati dell’allegato in modo che la dimensione full punti ora alla copia scalata.
Il tuo originale non viene eliminato. Resta su disco con il nome di partenza, registrato nei metadati dell’allegato, e raggiungibile in PHP tramite wp_get_original_image_path(). Ma nel front end non lo serve nessuno. Non l’editor a blocchi, non srcset, non l’anteprima nella libreria media. Sta lì come copia d’archivio.
Tutto ciò che viene dopo è quindi generato dal file scalato, non da quello che hai caricato:
| Dimensione | Sorgente da cui viene costruita |
|---|---|
full | la copia -scaled |
large, medium_large, medium, thumbnail | la copia -scaled |
Dimensioni personalizzate da add_image_size | la copia -scaled |
Dimensioni di tema e plugin, ad esempio woocommerce_thumbnail | la copia -scaled |
Candidati srcset | la copia -scaled |
È questo singolo dettaglio a spiazzare così tante persone.
Perché è la causa abituale del “la mia immagine nitida sembra sfocata”
Succedono due cose insieme, e solo una delle due è evidente.
Quella evidente è la risoluzione. Carichi una foto da 4000px per un hero a tutta larghezza. WordPress consegna al browser 2560px. Su uno schermo standard che riempie un contenitore da 1600px non se ne accorge nessuno. Su uno schermo retina 2x quel contenitore vuole circa 3200 pixel reali, ne riceve 2560, e il browser ingrandisce per colmare la differenza. Bordi morbidi, dettaglio impastato, testo dentro l’immagine che diventa illeggibile.
Quella meno evidente è la ricompressione. La copia -scaled non è un ritaglio senza perdita del tuo file. WordPress decodifica il caricamento, lo ridimensiona e lo ricomprime con la propria impostazione di qualità JPEG. Se il tuo originale era già un JPEG compresso uscito da Lightroom o da un telefono, quella è una codifica di seconda generazione: artefatti di compressione sopra altri artefatti di compressione. A rimetterci di più sono il dettaglio fine, la grana e le sfumature piatte. Lo noti anche quando le dimensioni in pixel sembrano adeguate.
Verificalo prima di cambiare qualsiasi cosa. Apri l’immagine in una nuova scheda e leggi il nome del file nell’URL. -scaled.jpg significa che il limite è scattato. Un suffisso con le dimensioni come -1536x1024.jpg significa altro — srcset ha scelto un formato intermedio troppo piccolo, e il filtro sulla soglia lì non ti aiuta.
Sul server:
find wp-content/uploads -name '*-scaled.*' | wc -l
Se quel numero è alto, il limite ha modellato l’intera libreria.
Puoi anche trascinare un file nel tool per disattivare le immagini scaled per vedere se una data sorgente supererebbe la soglia e con quali dimensioni finirebbe la copia scalata, prima di scegliere un’impostazione.
Il compromesso, detto onestamente
La maggior parte degli articoli ti dice che disattivare il limite costa spazio su disco. È il contrario, e vale la pena essere precisi.
L’occupazione su disco per immagine scende leggermente. Con la soglia attiva, WordPress conserva il tuo originale e una grande copia scalata. Con la soglia spenta tieni solo l’originale. Un file invece di due.
Banda e peso della pagina salgono, a volte parecchio. Con il limite spento, full è il tuo caricamento intatto. Qualsiasi cosa richiami o mostri la dimensione full — un lightbox, un plugin di galleria, un link “vedi originale”, un tema che richiede full per le immagini hero — ora spedisce un file che può pesare 6MB invece di 900KB. Su mobile è un vero problema di Largest Contentful Paint, e le CDN per immagini non sempre ti salvano, perché alcune lasciano passare i file oltre una certa dimensione.
La memoria durante il caricamento sale. Ridimensionare in PHP un’immagine da 6000px richiede molta più memoria che una da 2560px. Su hosting condiviso economico con un limite di memoria PHP basso, disattivare il limite è un ottimo modo per iniziare a vedere caricamenti falliti o miniature generate a metà. Alzare la soglia a 3840 invece di rimuoverla è la versione più prudente dello stesso intervento.
Ed è per questo che per la maggior parte dei siti la scelta ragionevole è alzare il numero, non toglierlo. Toglierlo è corretto quando servi immagini che hanno davvero bisogno della risoluzione piena: gallerie di qualità stampa, zoom sui prodotti, fotografia di architettura, tutto ciò in cui ci si aspetta che l’utente esamini l’originale.
Applicare la modifica come si deve
1. Metti il filtro dove sopravvive. Il functions.php di un tema child va bene. Un mu-plugin di un solo file è meglio, perché un cambio di tema non può annullarlo in silenzio.
<?php
/**
* Plugin Name: Raise big image threshold
*/
add_filter( 'big_image_size_threshold', function () {
return 3840;
} );
2. Ricarica le immagini interessate. Questo è il passaggio che le persone saltano, per poi concludere che il filtro non ha funzionato. La soglia viene valutata una volta sola, al caricamento. Gli allegati esistenti conservano i vecchi metadati per sempre. Elimina l’allegato, caricalo di nuovo e poi sistema i riferimenti negli articoli.
3. Non aspettarti che la rigenerazione delle miniature salvi qualcosa. wp media regenerate via WP-CLI ricostruisce le dimensioni intermedie a partire da qualunque file i metadati indichino come full — che per un’immagine già limitata è la copia -scaled. Non può restituire dettaglio che è stato buttato via. Utile come pulizia dopo aver ricaricato. Inutile come soluzione a sé.
4. Verifica il risultato, non darlo per scontato. Dopo aver ricaricato, apri l’immagine nel front end e rileggi il nome del file. Nessun -scaled significa che il filtro è attivo.
Quando disattivare è la mossa sbagliata
Se le tue immagini sorgente sono già sotto i 2560px e continuano a sembrare sfocate, la soglia non c’entrava nulla. Il problema è che il box di visualizzazione è più grande dei pixel disponibili, e la risposta è un file sorgente più grande o un contenitore più piccolo — non questo filtro.
Se il nome del file servito porta un suffisso con le dimensioni invece di -scaled, è srcset ad aver scelto un candidato piccolo. Di solito è un disallineamento fra la content width dichiarata dal tema e il box in cui l’immagine viene realmente mostrata. Spegnere il limite non cambia niente al riguardo.
E se un plugin riscrive il tuo src verso un ottimizzatore o un proxy CDN, niente di tutto questo vale finché non controlli cosa sta servendo quel proxy. Confronta ciò che WordPress dovrebbe generare con ciò che il browser carica davvero; quando le due cose non coincidono, guarda cosa c’è in mezzo.
FAQ
Domande
Come si disattivano le immagini scaled in WordPress?
Aggiungi un filtro su big_image_size_threshold che restituisce false. Mettilo in functions.php o in un piccolo mu-plugin. Restituire false spegne completamente il limite, quindi i caricamenti mantengono le dimensioni originali e non viene creata nessuna copia -scaled. Restituire invece un numero, per esempio 3840, alza il limite anziché rimuoverlo.
Che cos'è il suffisso -scaled nel nome di un file WordPress?
Indica una copia ricompressa creata da WordPress perché il file caricato superava i 2560px sul lato più lungo. Quella copia diventa la dimensione full ovunque nel sito. L'originale resta su disco con il suo nome normale, ma nel front end nulla lo richiama, e ogni miniatura e ogni candidato srcset viene costruito a partire dalla copia scalata.
Disattivare le immagini scaled occupa più spazio su disco?
Per singola immagine di solito ne occupa leggermente meno, perché WordPress smette di scrivere un secondo file di grandi dimensioni accanto al tuo originale. Il costo vero è la banda, non lo spazio. Con il limite spento, tutto ciò che punta alla dimensione full serve il tuo caricamento intatto, che su una connessione mobile può pesare diversi megabyte.
Disattivare la soglia sistema le immagini già sfocate?
No. Il filtro agisce solo sui nuovi caricamenti. Le immagini già presenti nella libreria mantengono metadati che puntano alla loro copia scalata, e rigenerare le miniature ricostruisce le dimensioni a partire da quello stesso file già limitato. Per recuperare la risoluzione devi eliminare l'allegato e ricaricarlo dopo aver attivato il filtro.
2560px è la soglia giusta da tenere?
Per la maggior parte dei siti di contenuti sì. Una sorgente da 2560px copre un box da 1280px con densità di pixel 2x, che è il caso più comune. Alzala a 3840 se usi hero a tutta larghezza, zoom sui prodotti o gallerie fotografiche. Disattivala del tutto solo quando hai davvero bisogno di servire gli originali intatti.