¿Cómo eliminar imágenes redimensionadas (recortadas) y prevenir futuros redimensionamientos?
Quiero eliminar todas las imágenes redimensionadas mientras mantengo la imagen original. Tengo más de 20 GB de datos sin usar ocupando espacio en el servidor. Por ejemplo:
- 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
¿Existe alguna manera de eliminar todas las imágenes redimensionadas y deshabilitar la creación de estas en el futuro?

La mayoría de las respuestas cubrieron cómo detener la creación de tamaños de imagen predeterminados en el futuro, pero esto no tiene en cuenta la creación de tamaños personalizados en tu tema. Aquí hay otra solución para agregar al 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' );
También puedes desactivar la generación de imágenes predeterminadas en el futuro estableciendo los tamaños de imagen en cero:
Pero para eliminar las imágenes que no sean las originales, me encontré con el mismo problema cuando olvidé configurarlo para que no lo hiciera. Lo que hice fue:
Descargar todas las fotos localmente usando un servicio SFTP. Me encanta Transmit (de pago), pero puedes usar algo como FileZilla (gratuito).
Descargar todos los archivos a un directorio.
Uso una Mac, pero cualquier terminal que permita bash funcionará. Codifiqué un simple 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 carpeta está ubicada en mi escritorio, y para la pregunta la nombré question240765
. Usé archivos .txt
para probar esto, pero puedes cambiarlo a .jpg
. Lo guardé como un archivo bash image_dust.sh
para permitirme modificarlo o mejorarlo más adelante. Ejecuta el script primero con el echo
e incluso podrías volcarlo a un archivo cambiando la línea:
echo rm $imageWithSize
por:
echo rm $imageWithSize >> result.txt
lo que registrará todo en el archivo result.txt y te permitirá revisarlo antes de eliminarlos realmente. Si todo está bien, cambia esa línea a:
rm $imageWithSize
Si tienes curiosidad, esto es lo que hace la expresión regular:
[a-z-]*
busca nombres de archivo comofoo-bar
ofo-fo-bar
. Si tienes letras mayúsculas en tu nombre, usa[A-Za-z-]*
-[0-9]
después del nombre del archivo busca el guión-
seguido de un número[0-9]
.*.txt
busca cualquier cosa después del primer dígito hasta el final del nombre con la extensión.
Después de completar el script y ejecutarlo, podrías eliminar todo en tu sitio y volver a subir las imágenes. Si te preocupa el tamaño del archivo, incluso podrías usar imagemagick
, pero prefiero sips
para reducir el tamaño de compresión de las imágenes.

No tengo idea de cómo eliminar las imágenes existentes. Pero puedes evitar que se generen tamaños de imagen para las nuevas imágenes que vayas a subir.
Si te gusta escribir código:
Coloca este fragmento de código en el archivo functions.php
de tu tema:
add_filter( 'intermediate_image_sizes_advanced', 'wpse_240765_image_sizes' );
function wpse_240765_image_sizes( $sizes ){
$sizes = array();
return $sizes;
}
O con un plugin: Usa este plugin - https://wordpress.org/plugins/image-sizes/
Te dará el mismo resultado. Incluso puedes elegir qué tamaños de imagen quieres evitar que se creen.

Si la programación no es tu punto fuerte, quizá prefieras una solución basada en plugins.
Lo que tengo en mente es sugerir un par de plugins gratuitos disponibles en el repositorio de WordPress:
Debo admitir que aún no he usado el primero - Media Cleaner - así que no puedo darte una opinión sólida al respecto.
Sin embargo, he usado el segundo - Optimize Images Resizing - y obtuve los resultados esperados.
Aspectos a considerar siempre en cualquier caso:
Antes de intentar cualquier cosa,
No puedo enfatizar lo suficiente la importancia de crear una copia de seguridad completa de tu instalación de WordPress (tanto tu carpeta de uploads como tu base de datos).
Entiendo que estamos hablando de 20GB pero una copia de seguridad es esencial, especialmente en esta situación particular.Este procedimiento consume tiempo y recursos del servidor.
Es recomendable poner tu sitio en modo mantenimiento.Eliminar archivos adjuntos huérfanos
Una vez terminado todo usa tu plugin favorito de Regenerate Thumbnails para recuperar los tamaños de imágenes de WordPress/tu tema, además instala EWWW Image Optimizer y Imsanity. Esta combinación garantizará imágenes optimizadas, redimensionadas y solo las necesarias.
Puntos específicos de cada plugin.
- "Los archivos detectados como no usados se añaden a un panel específico donde puedes elegir enviarlos a la papelera. Luego serán movidos a una papelera interna del plugin. Después de más pruebas, puedes borrarlos definitivamente".
- Algunos plugins pueden entrar en conflicto. Si esto pasa y asumiendo que estás en modo mantenimiento, desactívalos todos y haz tu limpieza.
- "PARA ELIMINAR tamaños de imágenes generados antes de activar el plugin, ve a Ajustes -> Medios y usa el botón bajo "Remove image sizes" para realizar la limpieza".
- Lee este hilo de soporte: Preguntas urgentes sobre el procesamiento de imágenes existentes
- Incluye funciones como: Crear copias de seguridad de tus uploads, analiza tu directorio de uploads, dándote un resumen de cuántos archivos originales y miniaturas hay, restaura copias de seguridad en caso de que hayas perdido un archivo que no debería haberse borrado.
- Lee este hilo de soporte: Copia de seguridad solo de la imagen original
Por favor cuéntanos cómo obtuviste los mejores resultados.

Si tienes acceso SSH, puedes ejecutar los siguientes comandos para listar y eliminar las imágenes redimensionadas. Luego podrás regenerarlas.
Listar todas las imágenes redimensionadas.
# Listar todas las imágenes redimensionadas.
# Uso: lrimg sitio.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
}
Eliminar todas las imágenes redimensionadas.
# Eliminar todas las imágenes redimensionadas.
# Uso: lrimgrm sitio.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
}
Ten cuidado aquí. Mantén tus copias de seguridad listas.
P.D. Mi servidor tiene una configuración NGINX por lo que las rutas del sitio son /var/www/"$1"/htdocs/
donde $1 es el parámetro que representa el nombre del sitio. Puedes modificarlo para que coincida con tu ruta.

Una pequeña mejora para tu expresión regular:
".*-[[:digit:]]{1,9}x[[:digit:]]{1,9}(@2x)?\.((jpg|jpeg|png|eps|gif))"
Esta modificación asegura que solo se coincida con la última ocurrencia de un patrón similar a dimensiones. Al hacerlo, ignora efectivamente las secuencias anteriores similares a dimensiones que podrían ser parte del nombre descriptivo de la imagen en lugar de su tamaño. Esto es particularmente útil para identificar y procesar archivos de imagen con precisión en entornos donde los nombres de archivo incluyen múltiples patrones similares a dimensiones, asegurando que operaciones como el redimensionamiento o eliminación de imágenes apunten a los archivos correctos.

Para eliminar todos los archivos de imagen superfluos, tendremos que recorrer todas las publicaciones, encontrar los archivos adjuntos de esas publicaciones, determinar qué tamaños de imagen adjuntos ya no son necesarios y eliminar esos archivos. Aquí vamos.
Primero, obtener todas las publicaciones (personalizadas) y páginas y recorrerlas:
$the_query = new WP_Query (array ('posts_per_page' => -1, 'post_type' => 'any'));
foreach ($all_posts as $post) { ... }
A continuación, para $post
obtener todas las imágenes adjuntas y obtener una lista de todos los tamaños de medios. Luego recorrerlos:
$images = get_attached_media ('image',$post); // devuelve un array de objetos de publicación
$sizes = get_intermediate_image_sizes(); // devuelve un array de cadenas identificadoras
foreach ($images as $image) {
foreach ($sizes as $size) {
...
}
}
Ahora, para esta imagen y tamaño, encontrar la URL y eliminar el archivo
$att = wp_get_attachment_image_src ($image->ID,$size); // devuelve un array de propiedades del archivo
wp_delete_file ($att['url']);
Recomendaría probar este código a fondo antes de aplicarlo... Con 20GB en imágenes, también podría tardar un tiempo en ejecutarse.

Aquí hay una manera de hacer esto de forma programática (en su mayor parte).
1: Configura tus tamaños de medios (ej: miniatura 300x300 y el resto 0x0 para evitar que WordPress genere cualquier otro tamaño que no sea la miniatura).
2: Genera las nuevas imágenes con WP CLI, pero no elimines ninguno de los tamaños antiguos hasta que esté listo. O si realmente no vas a conservar ninguna imagen redimensionada, omite este paso.
$ wp media regenerate --skip-delete
3: Busca y reemplaza las rutas de las imágenes con WP CLI. Esto actualiza el contenido de entradas y páginas para que no tengas imágenes rotas en tu sitio.
Tu expresión regular necesitará ser algo como lo siguiente:
(\/wp-content\/uploads\/)([0-9]{4}\/[0-9]{2}\/)(.*)(-[0-9]{1,5}x[0-9]{1,5})(\..{2,4})
Y tendrías el siguiente comando de búsqueda y reemplazo en WP CLI:
$ 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
O podrías tener una carpeta de subida diferente o no incluir las carpetas de año/mes. En ese caso, tendrías una expresión regular ligeramente diferente:
(\/app\/uploads\/)(.*)(-[0-9]{1,5}x[0-9]{1,5})(\..{2,4})
y ejecutarías:
$ wp search-replace '(\/app\/uploads\/)(.*)(-[0-9]{1,5}x[0-9]{1,5})(\..{2,4})' '$1$2$4' --regex
Para que quede claro: esto haría que tus tiempos de carga fueran horribles - todas las imágenes se servirían desde su archivo de tamaño completo y no desde la imagen más pequeña. Sería una buena idea quizás cambiar tu servidor de imágenes por una API/CDN de procesamiento de imágenes para que estos problemas desaparezcan :)
Si al menos mantienes una miniatura, como el ejemplo de 300x300 que di, necesitarías ejecutar una expresión regular un poco diferente:
(\/wp-content\/uploads\/)(.*)(-(?!(?:72))[0-9]{1,5}x(?!(?:72))[0-9]{1,5})(\..{2,4})
Luego ejecutas WP CLI dos veces. La primera reemplaza todas las imágenes que no son la miniatura de 72x72. La segunda cambia todas las miniaturas de 72x72 a la nueva miniatura de 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: ahora elimina todas las imágenes no utilizadas:
$ wp media regenerate

1) Para evitar que WordPress cree múltiples tamaños de imagen al cargar una imagen, puedes hacer esto sin usar un plugin.
Navega a Ajustes > Medios en la sección de administración.
Al establecer los tamaños en 0, desactivarás que WordPress cree tamaños de imagen predeterminados y solo se almacenará la imagen original.
2) Para reducir los 20GB de imágenes que tienes en tu sitio, simplemente accedería por SFTP a tu servidor y eliminaría manualmente las imágenes de diferentes tamaños. Desde el directorio raíz de una instalación de WordPress, navega a wp-content/uploads/<aaaa>/<mm>/
y encontrarás todas tus imágenes y archivos subidos. Debes asegurarte de dejar la imagen original, de lo contrario estarías eliminando la imagen completa. Cualquier nombre de archivo de imagen que tenga un - ###x###.jpg
adicional es una imagen generada automáticamente. La imagen original no tendría esto en el nombre del archivo.
Como comentario adicional - para ayudarte con tus imágenes, te recomendaría el plugin WP-Smush de WPMU DEV.
WP-Smush - Optimización de Imágenes
Es realmente bueno y cuando subes imágenes, utiliza automáticamente sus servidores para comprimir y optimizar las imágenes antes de almacenarlas. También puede reducir imágenes de gran resolución a un tamaño máximo razonable. Realmente no deberías necesitar mostrar una imagen más grande que 2048x2048.

Ok... ¿cómo usar SFTP y eliminar imágenes redimensionadas adicionales?

Este es el programa que uso para conectarme por SFTP a mi servidor. https://winscp.net/eng/download.php Básicamente me permite navegar por todo el contenido de la instalación de WordPress, y puedo editar cualquier archivo en mi editor de texto; también puedo agregar y eliminar archivos fácilmente con esto. Dependerá de tu proveedor de hosting para configurarlo e iniciar sesión con SFTP.

O Cyberduck, que tiene versión para OSX y Windows. https://cyberduck.io/?l=en

Los siguientes pasos deberían funcionar:
1) Debes comenzar eliminando los tamaños de imagen innecesarios de tus archivos relevantes, como functions.php en tu tema y cualquier plugin si existen (por ejemplo, rudderless).
2) Luego puedes eliminar todos los tamaños de imagen requeridos vía FTP.
3) Después necesitas regenerar las miniaturas (es decir, todos los tamaños de imagen que WordPress está configurado para crear). Puedes usar cualquier plugin 'Regenerate thumbnails' del repositorio de WP.
Alternativamente prueba esto: 1) Igual que el paso 1 anterior
2) Hay un par de plugins en el directorio de plugins (repositorio) que eliminarán todas las miniaturas de WP y luego solo generarán las miniaturas cuando sean solicitadas por primera vez en cualquier página de tu sitio web. En solicitudes posteriores de la imagen, la imagen ya existirá y se servirá normalmente. El beneficio de esto es que las miniaturas solo se crean para imágenes/tamaños que realmente requiere tu sitio. Sin embargo, las imágenes llamadas de formas no estándar podrían no generarse.
Si quieres reducir la sobrecarga adicional de imágenes originales excesivamente grandes, puedes usar el plugin 'imsanity' para reducir el tamaño físico de estos originales a un tamaño de tu elección. Es una gran herramienta para sitios con imágenes subidas por usuarios.

Terminé usando FileZilla para conectarme por FTP. Luego busqué en la carpeta de subidas utilizando la función de búsqueda de archivos remotos dentro de FileZilla. Usé expresiones regulares en combinaciones para seleccionar todo y eliminar. Por ejemplo: \d\d\dx\d\d\d.jpg o \d\dx\d\d.png o \d\d\dx\d\d\d\d.gif. Seguí usando diferentes combinaciones del "\d" para encontrar tanto imágenes de tamaño 3 dígitos por 4 dígitos como imágenes de 2 dígitos por 2 dígitos.

No soy programador pero esto funciona - lo encontré en esta URL https://crunchify.com/wordpress-tips-how-to-remove-redundant-image-sizes-and-files/
Conéctate por SSH a tu directorio public_html
Usa el siguiente comando (sin las comillas) para encontrar todas las imágenes del tamaño especificado "find . -name -72x72."
Esta línea elimina las imágenes del tamaño especificado "find . -name -72x72. | xargs rm -f"
Luego solo cambia el 72x72 por el siguiente tamaño de imagen
Elimina mil imágenes en un segundo - pensarás que no funcionó hasta que revises tus subidas y veas que han desaparecido.

Yo también me enfrenté al mismo problema y finalmente encontré la solución. Funcionó al 100% para mí. He liberado cerca de 10GB de archivos.
Los siguientes comandos eliminarán las imágenes redimensionadas actualmente, incluyendo las versiones Retina, para que podamos redimensionar correctamente las imágenes de WordPress según las nuevas dimensiones del tema. Y sí, estamos usando la línea de comandos, porque yo (Michael) soy de la vieja escuela.
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 {} \;
Referencia - https://www.axelerant.com/blog/remove-resize-wordpress-images
