Icono del sitio Binario 0

Compresión Automática de Imágenes antiguas en WordPress con PHP

Artículos Guías Manuales Sistemas Linux Windows Redes MySql Binario 0 Binario Cero

Artículos Guías Manuales Sistemas Linux Windows Redes MySql Binario 0 Binario Cero

En sitios WordPress con alto volumen de contenido multimedia, las imágenes suelen representar un gran porcentaje del peso total del sitio web. Para mejorar el rendimiento, reducir el consumo de ancho de banda y mejorar los tiempos de carga, la compresión de imágenes se convierte en una tarea esencial.

En este artículo te presentamos un script PHP independiente que puede ser ejecutado tanto desde navegador como desde la línea de comandos, permitiendo comprimir automáticamente todas las imágenes en el directorio wp-content/uploads.

<?php
// comprimir-imagenes.php
// Ejecutar desde navegador o CLI: php comprimir-imagenes.php > salida.txt

set_time_limit(0);
$uploads_dir = __DIR__ . '/wp-content/uploads'; // Ajusta si estás fuera de WordPress
$calidad = 80; // Valor entre 0 y 100
$delete_original = false; // Cambia a true para eliminar originales (no recomendado en este script)

echo "<pre>";
echo "Iniciando compresión en: $uploads_dir\n\n";

function comprimir_imagen($file_path, $calidad, $delete_original = false) {
    $ext = strtolower(pathinfo($file_path, PATHINFO_EXTENSION));
    if (!in_array($ext, ['jpg', 'jpeg', 'png', 'webp'])) return;

    $original_size = filesize($file_path);
    $img = false;

    switch ($ext) {
        case 'jpg':
        case 'jpeg':
            $img = @imagecreatefromjpeg($file_path);
            break;
        case 'png':
            $img = @imagecreatefrompng($file_path);
            imagepalettetotruecolor($img);
            imagealphablending($img, true);
            imagesavealpha($img, true);
            break;
        case 'webp':
            $img = @imagecreatefromwebp($file_path);
            break;
    }

    if (!$img) {
        echo "Error cargando: $file_path\n";
        return;
    }

    $tmp_file = $file_path . '.tmp';

    switch ($ext) {
        case 'jpg':
        case 'jpeg':
            imagejpeg($img, $tmp_file, $calidad);
            break;
        case 'png':
            $png_compression = 9 - round($calidad / 11.111); // convierte 0-100 → 0-9
            imagepng($img, $tmp_file, $png_compression);
            break;
        case 'webp':
            imagewebp($img, $tmp_file, $calidad);
            break;
    }

    imagedestroy($img);

    if (!file_exists($tmp_file)) {
        echo "Error al escribir: $file_path\n";
        return;
    }

    $compressed_size = filesize($tmp_file);
    $ahorro = round((1 - $compressed_size / $original_size) * 100, 2);

    if ($delete_original) unlink($file_path);
    rename($tmp_file, $file_path);

    echo "Comprimido: " . basename($file_path) . "\n";
    echo " - Original: " . round($original_size / 1024, 2) . " KB\n";
    echo " - Comprimido: " . round($compressed_size / 1024, 2) . " KB\n";
    echo " - Ahorro: $ahorro %\n\n";
}

function recorrer_y_comprimir($dir, $calidad, $delete_original = false) {
    $rii = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
    foreach ($rii as $file) {
        if ($file->isDir()) continue;
        $path = $file->getPathname();
        if (preg_match('/\.(jpe?g|png|webp)$/i', $path)) {
            comprimir_imagen($path, $calidad, $delete_original);
        }
    }
}

recorrer_y_comprimir($uploads_dir, $calidad, $delete_original);
echo "Proceso completado.\n";
echo "</pre>";

¿Qué hace este script?

Este script realiza las siguientes funciones:

Requisitos

Instalación y Uso

1. Coloca el archivo en la raíz de tu instalación WordPress

Guarda el siguiente archivo como comprimir-imagenes.php en el mismo directorio donde se encuentra tu wp-config.php:

// contenido del script (ver más abajo)

2. Configura los parámetros

Dentro del script, puedes ajustar los siguientes valores:

$calidad = 80; // Calidad de compresión (0 a 100)
$delete_original = false; // true para eliminar los originales tras comprimir

Nota: Se recomienda mantener $delete_original = false para evitar pérdidas accidentales.

3. Ejecuta el script

Desde el navegador:

https://tusitio.com/comprimir-imagenes.php

Desde la línea de comandos:

php comprimir-imagenes.php > salida.txt

Ejemplo de salida

Iniciando compresión en: /var/www/html/wp-content/uploads

Comprimido: foto1.jpg
- Original: 254.18 KB
- Comprimido: 145.33 KB
- Ahorro: 42.83 %

Comprimido: captura.png
- Original: 310.94 KB
- Comprimido: 210.66 KB
- Ahorro: 32.26 %

Proceso completado.

¿Cómo funciona?

El script utiliza la biblioteca GD de PHP para:

Además, aplica una lógica de compresión para PNG basada en la conversión del rango 0–100 a 0–9 para el nivel de compresión nativo de este formato.

Seguridad y recomendaciones

¿Por qué usar esto en lugar de un plugin?

Extensiones futuras posibles

Salir de la versión móvil