Come eliminare le immagini caricate ridimensionate (ritagliate) e impedire il ridimensionamento futuro?

28 set 2016, 03:24:30
Visualizzazioni: 27.4K
Voti: 10

Voglio eliminare tutte le immagini ridimensionate mantenendo solo l'immagine originale. Ho più di 20 GB di dati inutilizzati che occupano spazio sul server. Per esempio:

  • first-image-name.jpg
  • first-image-name-72x72.jpg
  • first-image-name-150x150.jpg
  • first-image-name-250x250.jpg
  • first-image-name-300x300.jpg
  • first-image-name-400x400.jpg
  • first-image-name-1024x1024.jpg
  • second-image-name.jpg
  • second-image-name-72x72.jpg
  • second-image-name-150x150.jpg
  • second-image-name-250x250.jpg
  • second-image-name-300x300.jpg
  • second-image-name-400x400.jpg
  • second-image-name-1024x1024.jpg

Esiste un modo per eliminare tutte le immagini ridimensionate e disabilitare la creazione di queste in futuro?

4
Commenti

Puoi probabilmente cancellare le dimensioni extra svuotando la variabile globale $_wp_additional_image_sizes; e rimuovendo le chiamate a add_image_size() - per quanto riguarda l'eliminazione dei file esistenti potresti usare https://wordpress.org/plugins/regenerate-thumbnails/

jgraup jgraup
28 set 2016 03:37:03

Nella mia esperienza, quel plugin non cancella i file ridondanti. @jgraup

Andy Macaulay-Brook Andy Macaulay-Brook
28 set 2016 10:48:00

@AndyMacaulay-Brook, Forse questo può funzionare

bravokeyl bravokeyl
7 ott 2016 06:21:57

rigenerare le miniature ELIMINA effettivamente i ritagli non utilizzati se il tuo tema non ha quella dimensione registrata. almeno a partire dal 2021.

NickFMC NickFMC
13 lug 2021 01:42:14
Tutte le risposte alla domanda 12
0

La maggior parte delle risposte ha spiegato come impedire la creazione di future dimensioni predefinite delle immagini, ma questo non tiene conto della creazione di dimensioni personalizzate nel tuo tema. Ecco un'altra soluzione da aggiungere al file functions.php:

function wpse_240765_unset_images( $sizes ){
    unset( $sizes[ 'thumbnail' ]);
    unset( $sizes[ 'medium' ]);
    unset( $sizes[ 'medium_large' ] );
    unset( $sizes[ 'large' ]);
    unset( $sizes[ 'full' ] );
    return $sizes;
}
add_filter( 'intermediate_image_sizes_advanced', 'wpse_240765_unset_images' );

Puoi anche disattivare la generazione futura delle dimensioni predefinite impostando le dimensioni delle immagini a zero:

impostazioni dimensioni immagini

Per rimuovere le immagini diverse dagli originali, mi sono trovato nella tua stessa situazione quando ho dimenticato di disattivare questa opzione. Ecco cosa ho fatto:

  • Scarica tutte le foto localmente usando un servizio SFTP. Io uso Transmit (a pagamento) ma puoi usare qualcosa come Filezilla (gratuito).

  • Scarica tutti i file in una directory.

Io uso un Mac, ma qualsiasi terminale che supporti bash funzionerà. Ho creato un semplice script bash:

# !/bin/bash

USERNAME=vader
DIRECTORY="/Users/$USERNAME/desktop/question240765"
for imageWithSize in $(find "$DIRECTORY" -type f -regex '.*/[a-z-]*-[0-9].*.txt$'); do
    cd $DIRECTORY
    echo rm $imageWithSize
done

La cartella si trova sul mio desktop e per questa domanda l'ho chiamata question240765. Ho usato file .txt per testare, ma puoi cambiarli in .jpg. Ho salvato lo script come file bash image_dust.sh per poterlo modificare o migliorare in futuro. Esegui prima lo script con echo e puoi anche salvare l'output in un file modificando la riga:

echo rm $imageWithSize 

in:

echo rm $imageWithSize >> result.txt

Questo registrerà tutto nel file result.txt e ti permetterà di controllarlo prima di rimuovere davvero i file. Se tutto è corretto, cambia la riga in:

rm $imageWithSize

Se sei curioso, ecco cosa fa la regex:

  • [a-z-]* cerca nomi di file come foo-bar o fo-fo-bar. Se hai lettere maiuscole nel nome, usa [A-Za-z-]*
  • -[0-9] dopo il nome del file cerca il trattino - seguito da un numero [0-9]
  • .*.txt cerca qualsiasi cosa dopo il primo numero fino alla fine del nome con l'estensione.

Dopo aver completato e eseguito lo script, puoi eliminare tutto dal tuo sito e ricaricare le immagini. Se sei preoccupato per la dimensione dei file, potresti usare imagemagick, ma preferisco sips per ridurre la dimensione di compressione delle immagini.

2 ott 2016 08:59:47
0

Puoi facilmente eliminare i file utilizzando il comando "find" su Linux, devi solo fare la stessa cosa. Puoi eseguire quanto segue nella console bash:

cd /var/www/wordpress/wp-content/uploads
find -type f -regex '.*[0-9]+x[0-9]+.\(jpg\|png\|jpeg\)$' -delete
27 ott 2019 23:15:38
0

Nessuna idea su come rimuovere le immagini esistenti. Ma puoi evitare la generazione delle dimensioni delle immagini per le nuove immagini che caricherai.

Se preferisci scrivere codice: Inserisci questo snippet di codice nel file functions.php del tuo tema-

add_filter( 'intermediate_image_sizes_advanced', 'wpse_240765_image_sizes' );

function wpse_240765_image_sizes( $sizes ){
    $sizes = array();
    return $sizes;
}

Oppure con un plugin: Usa questo plugin- https://wordpress.org/plugins/image-sizes/

Ti darà lo stesso risultato. Potrai anche scegliere quali dimensioni delle immagini vuoi evitare che vengano create. Plugin Image Sizes per WordPress

28 set 2016 05:30:48
1

Se la programmazione non è il tuo punto forte potresti valutare una soluzione basata su plugin.

Quello che ho in mente è suggerire un paio di plugin gratuiti disponibili nel repository di WordPress:

Devo ammettere che non ho ancora utilizzato il primo - Media Cleaner - quindi non posso darti un'opinione solida.

Ho invece utilizzato il secondo - Optimize Images Resizing - e ho ottenuto i risultati attesi.

Punti da considerare sempre in ogni caso:

Prima di tentare qualsiasi cosa,

  • Non posso sottolineare abbastanza l'importanza di creare un backup completo della tua installazione WordPress (sia la cartella uploads che il database).
    Capisco che stiamo parlando di 20GB, ma un backup è essenziale, specialmente in questa situazione unica.

  • Questa procedura richiede tempo ed è pesante per il server.
    È saggio mettere il tuo sito in modalità manutenzione.

  • Elimina gli allegati orfani

Dopo aver completato tutto usa il tuo plugin preferito per Rigenerare le Thumbnail per ripristinare le dimensioni delle immagini di WordPress/dei temi, e installa EWWW Image Optimizer e Imsanity. Questa combinazione garantirà immagini ottimizzate, ridimensionate e solo quelle necessarie.


Punti specifici per i plugin.

Media Cleaner

  • "I file rilevati come non utilizzati vengono aggiunti a una dashboard specifica dove puoi scegliere di cestinarli. Verranno poi spostati in un cestino interno al plugin. Dopo ulteriori test, puoi cestinarli definitivamente".
  • Alcuni plugin potrebbero entrare in conflitto. Se succede e assumendo che sei in modalità manutenzione, disattiva tutti e fai la tua pulizia.

Optimize Images Resizing

Thumbnail Cleaner

  • Include funzioni come: Creare backup dei tuoi upload, analizzare la tua directory uploads, darti una panoramica di quanti file originali e thumbnail ci sono, ripristinare i backup nel caso tu abbia perso un file che non doveva essere eliminato.
  • Leggi questa discussione di supporto: Backup solo dell'immagine originale

Facci sapere come hai ottenuto i migliori risultati.

29 set 2016 05:40:43
Commenti

Nota - Solo Media cleaner ha ricevuto aggiornamenti negli ultimi 3 anni.

Stender Stender
2 dic 2019 11:11:08
1

Se hai accesso SSH puoi eseguire i seguenti comandi per elencare e rimuovere le immagini ridimensionate. Successivamente potrai ricostruirle.

Elenca tutte le immagini ridimensionate.

# Elenca tutte le immagini ridimensionate.
# Utilizzo: lrimg sito.ext
function lrimg() {
  clear
  THE_PWD=$PWD
  cd ~
  cd /var/www/"$1"/htdocs/wp-content/uploads/
  find . -regextype posix-extended -regex ".*-[[:digit:]]{1,9}x[[:digit:]]{1,9}(@2x)?.(jpg|jpeg|png|eps|gif)" -type f
  cd $THE_PWD
}

Rimuovi tutte le immagini ridimensionate.

# Rimuovi tutte le immagini ridimensionate.
# Utilizzo: lrimgrm sito.ext
function lrimgrm() {
  clear
  THE_PWD=$PWD
  cd ~
  cd /var/www/"$1"/htdocs/wp-content/uploads/
  find . -regextype posix-extended -regex ".*-[[:digit:]]{1,9}x[[:digit:]]{1,9}(@2x)?.(jpg|jpeg|png|eps|gif)" -type f -exec rm {}  \;
  cd $THE_PWD
}

Fai attenzione qui. Tieni pronti i tuoi backup.

P.S. Il mio server ha una configurazione NGINX, ecco perché i percorsi dei siti sono /var/www/"$1"/htdocs/ dove $1 è il parametro che rappresenta il nome del sito. Puoi modificarlo per adattarlo al tuo percorso.

9 ott 2016 14:19:22
Commenti

Un piccolo miglioramento per la tua espressione regolare: ".*-[[:digit:]]{1,9}x[[:digit:]]{1,9}(@2x)?\.((jpg|jpeg|png|eps|gif))" Questa modifica garantisce che venga riconosciuta solo l'ultima occorrenza di un pattern simile alle dimensioni. In questo modo, ignora efficacemente le sequenze simili a dimensioni che potrebbero far parte del nome descrittivo dell'immagine piuttosto che della sua dimensione effettiva. Questo è particolarmente utile per identificare e elaborare accuratamente i file immagine in ambienti dove i nomi dei file includono più pattern simili a dimensioni, assicurando che operazioni come il ridimensionamento o l'eliminazione delle immagini vadano a colpire i file corretti.

emjay emjay
9 apr 2024 09:54:40
0

Per rimuovere tutti i file immagine superflui, dovremo scorrere tutti i post, trovare gli allegati di quei post, stabilire quali dimensioni delle immagini allegate non sono più necessarie e rimuovere quei file. Ecco come fare.

Per prima cosa, ottieni tutti i post e le pagine (anche personalizzati) e scorri attraverso di essi:

$the_query = new WP_Query (array ('posts_per_page' => -1, 'post_type' => 'any'));
foreach ($all_posts as $post) { ... }

Poi per ogni $post recupera tutte le immagini allegate e ottieni un elenco di tutte le dimensioni dei media. Quindi scorri attraverso di essi:

$images = get_attached_media ('image',$post); // restituisce un array di oggetti post
$sizes = get_intermediate_image_sizes(); // restituisce un array di stringhe identificative
foreach ($images as $image) {
  foreach ($sizes as $size) {
    ...
    }
  }

Ora per questa immagine e dimensione, trova l'URL e elimina il file

$att = wp_get_attachment_image_src ($image->ID,$size); // restituisce un array di proprietà del file
wp_delete_file ($att['url']);

Consiglio di testare accuratamente questo codice prima di applicarlo... Con 20GB di immagini potrebbe anche volerci un po' per eseguirlo.

2 ott 2016 17:59:42
0

Ecco un modo per farlo in modo programmatico (per la maggior parte).

1: Imposta le dimensioni dei tuoi media (es: thumbnail 300x300 e il resto 0x0 per evitare che WordPress generi altre dimensioni oltre alla thumbnail).

2: Genera le nuove immagini con WP CLI, ma non eliminare nessuna delle vecchie dimensioni finché non sei pronto. Oppure, se non intendi conservare nessuna immagine ridimensionata, salta questo passaggio.

$ wp media regenerate --skip-delete

3: Sostituisci i percorsi delle immagini con WP CLI. Questo aggiorna i contenuti di post e pagine in modo da non avere immagini rotte sul tuo sito.

La tua espressione regolare dovrà essere simile alla seguente.

(\/wp-content\/uploads\/)([0-9]{4}\/[0-9]{2}\/)(.*)(-[0-9]{1,5}x[0-9]{1,5})(\..{2,4})

Visualizzazione espressione regolare

Debuggex Demo

E avresti il seguente wp search-replace:

$ wp search-replace '(\/wp-content\/uploads\/)([0-9]{4}\/[0-9]{2}\/)(.*)(-[0-9]{1,5}x[0-9]{1,5})(\..{2,4})' '$1$2$3$5' --regex

Oppure potresti avere una cartella di upload diversa o non includere le cartelle anno/mese. In quel caso avresti una regex leggermente diversa

(\/app\/uploads\/)(.*)(-[0-9]{1,5}x[0-9]{1,5})(\..{2,4})

Visualizzazione espressione regolare

Debuggex Demo

e eseguirai

$ wp search-replace '(\/app\/uploads\/)(.*)(-[0-9]{1,5}x[0-9]{1,5})(\..{2,4})' '$1$2$4' --regex

Per essere chiari: questo renderebbe i tuoi tempi di caricamento orribili - tutte le immagini verrebbero servite dal file a dimensione intera e non dall'immagine più piccola. Sarebbe una buona idea magari sostituire il tuo server di immagini con un'API di elaborazione immagini / CDN così questi problemi spariscono :)

Se stai conservando almeno una thumbnail, come l'esempio 300x300 che ho dato, dovresti eseguire una regex leggermente diversa:

(\/wp-content\/uploads\/)(.*)(-(?!(?:72))[0-9]{1,5}x(?!(?:72))[0-9]{1,5})(\..{2,4})

Visualizzazione espressione regolare

Debuggex Demo

Poi esegui WP CLI due volte. La prima sostituisce tutte le immagini che non sono la thumbnail 72x72. La seconda cambia tutte le thumbnail 72x72 nella nuova thumbnail 300x300

$ wp search-replace '(\/wp-content\/uploads\/)(.*)(-(?!(?:72))[0-9]{1,5}x(?!(?:72))[0-9]{1,5})(\..{2,4})' '$1$2$4' --regex

$ wp search-replace '(\/wp-content\/uploads\/)(.*)(-72x72)(\..{2,4})' '$1$2-300x300$4' --regex

4: ora elimina tutte le immagini inutilizzate:

$ wp media regenerate
4 feb 2020 17:48:16
5

1) Per impedire a WordPress di creare multiple dimensioni di immagini durante il caricamento, puoi farlo senza utilizzare un plugin.

Vai su Impostazioni > Media nella sezione di amministrazione.

Impostando le dimensioni a 0 disabiliterai WordPress dalla creazione delle dimensioni predefinite e verrà memorizzata solo l'immagine originale.

Disabilita dimensioni immagini WordPress

2) Per ridurre i 20GB di immagini presenti sul tuo sito, ti consiglio di connetterti via SFTP al tuo server e cancellare manualmente le immagini nelle diverse dimensioni. Dalla directory root di un'installazione WordPress, naviga fino a wp-content/uploads/<yyyy>/<mm>/ e troverai tutte le tue immagini e file multimediali caricati. Assicurati di lasciare l'immagine originale, altrimenti elimineresti completamente l'immagine. Qualsiasi nome file immagine con un aggiuntivo - ###x###.jpg è un'immagine generata automaticamente. L'immagine originale non avrà questo nel nome del file.

Come suggerimento aggiuntivo - per aiutarti con le tue immagini ti consiglio di dare un'occhiata al plugin WP-Smush di WPMU DEV.

WP-Smush - Ottimizzazione Immagini

È davvero ottimo e quando carichi immagini utilizza automaticamente i loro server per comprimere e ottimizzare le immagini prima di memorizzarle. Può anche ridimensionare immagini ad alta risoluzione a una dimensione massima ragionevole. Non dovresti mai aver bisogno di visualizzare un'immagine più grande di 2048x2048.

28 set 2016 18:21:44
Commenti

Ok... come fare SFTP e eliminare le immagini ridimensionate aggiuntive ???

Mohamed Gamal Mohamed Gamal
28 set 2016 22:21:54

Questo è il programma che uso per connettermi via SFTP al mio server. https://winscp.net/eng/download.php Fondamentalmente mi permette di navigare tra i contenuti dell'intera installazione di WordPress e posso modificare qualsiasi file nel mio editor di testo; posso anche aggiungere e rimuovere facilmente file con questo strumento. Dipenderà dal tuo provider di hosting per configurare e accedere via SFTP.

italiansoda italiansoda
28 set 2016 23:34:52

Oppure Cyberduck, che ha una versione per OSX e Windows. https://cyberduck.io/?l=en

italiansoda italiansoda
28 set 2016 23:45:21

Può essere fatto utilizzando un client FTP?

Mohamed Gamal Mohamed Gamal
28 set 2016 23:45:21

Sostanzialmente è la stessa cosa. La S sta semplicemente per FTP Sicuro.

italiansoda italiansoda
29 set 2016 00:06:07
0

I seguenti passaggi dovrebbero risolvere il problema:

1) Inizia rimuovendo tutte le dimensioni delle immagini non necessarie dai tuoi file rilevanti, ad esempio functions.php nel tuo tema e da eventuali plugin se presenti (es. rudderless).

2) Successivamente puoi eliminare tutte le dimensioni delle immagini richieste via FTP.

3) Poi devi rigenerare le miniature (cioè tutte le dimensioni delle immagini che WordPress è impostato per creare). Puoi usare qualsiasi plugin 'Regenerate thumbnails' dal repository di WordPress.

In alternativa prova questo approccio: 1) Come il punto 1 sopra

2) Ci sono un paio di plugin nella directory dei plugin (repository) che eliminano tutte le miniature di WordPress e poi generano le miniature solo quando vengono richieste per la prima volta in una qualsiasi pagina del tuo sito. Alle richieste successive dell'immagine, questa esisterà già e verrà servita normalmente. Il vantaggio è che le miniature vengono create solo per immagini/dimensioni effettivamente richieste dal tuo sito. Tuttavia, immagini richiamate in modi non standard potrebbero non essere generate.

Se vuoi ridurre l'overhead aggiuntivo causato da immagini originali eccessivamente grandi, puoi usare il plugin 'imsanity' per ridurre la dimensione fisica di questi originali a una misura a tua scelta. È uno strumento ottimo per siti con immagini caricate dagli utenti.

2 ott 2016 02:20:18
0

Alla fine ho utilizzato FileZilla per connettermi via FTP. Successivamente ho cercato nella cartella degli upload utilizzando la funzione di ricerca file remota all'interno di FileZilla. Ho usato le espressioni regolari (regex) in combinazione per selezionare ed eliminare tutto. Ad esempio: \d\d\dx\d\d\d.jpg oppure \d\dx\d\d.png o \d\d\dx\d\d\d\d.gif. Ho continuato a usare diverse combinazioni di "\d" per trovare sia immagini con dimensioni a 3 cifre per 4 cifre che a 2 cifre per 2 cifre.

29 set 2020 22:01:17
1

Non sono un programmatore ma questo funziona - l'ho trovato a questo URL https://crunchify.com/wordpress-tips-how-to-remove-redundant-image-sizes-and-files/

Connettiti via SSH alla tua cartella public_html

Usa il seguente comando (senza le virgolette) per trovare tutte le immagini della dimensione specificata "find . -name -72x72."

Questa riga rimuove le immagini della dimensione specificata "find . -name -72x72. | xargs rm -f"

Poi basta cambiare 72x72 con la prossima dimensione d'immagine

Rimuove mille immagini in un secondo - potresti pensare che non abbia funzionato finché non controlli la tua cartella uploads e vedi che sono sparite.

15 mar 2021 12:45:45
Commenti

In generale è più sicuro usare -exec con find invece di xargs poiché evita problemi con spazi bianchi o altri caratteri nei nomi dei file che necessitano di essere escapati.

Rup Rup
15 mar 2021 16:59:46
0

Anche io ho affrontato lo stesso problema e alla fine ho trovato la soluzione. Ha funzionato al 100% per me. Ho liberato quasi 10GB di file.

Le righe di comando qui sotto rimuoveranno le immagini ridimensionate attualmente, incluse le versioni Retina, in modo da poter ridimensionare correttamente le immagini di WordPress in base alle nuove dimensioni del tema. E sì, stiamo usando la riga di comando, perché io (Michael) sono vecchia scuola.

cd /home/example/public_html/wp-content/uploads

find . -regextype posix-extended -regex ".*-[[:digit:]]{2,4}x[[:digit:]]{2,4}(@2x)?.(jpg|jpeg|png|eps|gif)" -type f -exec rm {} \;

Riferimento - https://www.axelerant.com/blog/remove-resize-wordpress-images

15 ott 2021 16:47:51