Cómo reducir el tamaño de un PNG: 5 maneras
- Reduce las dimensiones. El tamaño del archivo depende del número de píxeles, así que reducir a la mitad el ancho y el alto deja aproximadamente una cuarta parte de los datos.
- Reduce los colores a una paleta de 8 bits. Herramientas como pngquant suelen recortar entre un 60 y un 80% con poco cambio visible en los gráficos.
- Elimina los metadatos. Los fragmentos de texto, los perfiles ICC y los datos del editor pueden sumar cientos de kilobytes.
- Usa la compresión máxima. El nivel 9 con filtrado adaptativo ahorra unos puntos porcentuales más sin pérdida de calidad.
- Convierte las fotos a JPG. Si el PNG es una fotografía y no necesitas transparencia, el JPG suele ser de 5 a 10 veces más pequeño.
La compresión PNG es, por naturaleza, sin pérdida
Esto es lo más importante que hay que entender sobre PNG: el nivel de compresión no afecta a la calidad. Un PNG guardado con nivel de compresión 1 y otro guardado con nivel 9 producen exactamente la misma imagen al abrirlos. Cada píxel será idéntico, bit a bit.
PNG usa el algoritmo DEFLATE (el mismo de gzip y de los archivos ZIP) para comprimir los datos de píxeles. Cuando ajustas el "nivel" de compresión, controlas cuánto se esfuerza el codificador en buscar patrones repetidos y estrategias de codificación óptimas. Los niveles más altos implican:
- Archivos más pequeños — el codificador encuentra formas más eficientes de representar los mismos datos
- Codificación más lenta — hace falta más cálculo para encontrar esas eficiencias
- Descompresión idéntica — sea cual sea el nivel, los píxeles decodificados son los mismos
Esto es radicalmente distinto de JPEG, donde el ajuste de calidad controla directamente cuántos datos visuales se descartan para siempre. Con PNG nunca se descarta nada. La cuestión de la "calidad" es simplemente: ¿cuánto tiempo de CPU estás dispuesto a invertir para arañar unos bytes más?
Concepto clave: nivel de compresión PNG = esfuerzo de codificación, no calidad. El nivel 9 no significa "menor calidad" — significa "esforzarse más en encontrar una representación más pequeña de los mismos datos".
PNG-8 vs PNG-24 vs PNG-32
La forma más eficaz de reducir el tamaño de un PNG es elegir el subtipo de PNG adecuado para tu imagen. La diferencia entre estos tipos puede suponer una reducción de 3 a 5 veces con un cambio visible mínimo o nulo.
| Tipo | Profundidad de color | Colores | Transparencia | Tamaño típico |
|---|---|---|---|---|
| PNG-8 | 8 bits (paleta indexada) | Hasta 256 | 1 bit (sí/no) o alfa de 8 bits | El más pequeño |
| PNG-24 | 24 bits (RGB) | 16,7 millones | Ninguna | Medio |
| PNG-32 | 32 bits (RGBA) | 16,7 millones | Alfa completo de 8 bits | El más grande |
PNG-8: el arma secreta para archivos pequeños
PNG-8 guarda cada píxel como un índice dentro de una paleta de hasta 256 colores. En lugar de usar 3 bytes por píxel (RGB) o 4 bytes (RGBA), usa solo 1 byte. Esta diferencia fundamental hace que los archivos PNG-8 sean de 3 a 5 veces más pequeños que sus equivalentes PNG-24.
PNG-8 es ideal para:
- Logotipos — la mayoría de los logotipos usan menos de 20 colores
- Iconos y elementos de interfaz — los iconos de diseño plano suelen tener entre 5 y 15 colores
- Ilustraciones sencillas — diagramas, gráficos e infografías con zonas de color plano
- Capturas de interfaces con mucho texto — salidas de terminal, editores de código, documentos de texto
PNG-8 no es adecuado para:
- Fotografías — las fotos contienen miles de colores; reducirlas a 256 provoca bandas visibles
- Degradados suaves — 256 colores no pueden representar un degradado suave sin escalones visibles
- Imágenes que requieren semitransparencia — PNG-8 puede guardar un valor alfa para cada color de la paleta, pero los bordes suaves y las sombras suelen necesitar más combinaciones de color y alfa de las que permiten 256 entradas
PNG-24 vs PNG-32: ¿necesitas el canal alfa?
La diferencia entre PNG-24 y PNG-32 es el canal alfa (transparencia). Cada píxel de un PNG-32 lleva un byte extra para la transparencia, lo que hace que los archivos sean entre un 25 y un 33% más grandes que en PNG-24. Si tu imagen no necesita transparencia (no tiene zonas transparentes ni semitransparentes), guárdala como PNG-24 para evitar el peso de un canal alfa que no se usa.
Mejora rápida: si tienes una imagen PNG-24 que usa solo 50 colores distintos (algo habitual en maquetas de interfaz y diagramas), convertirla a PNG-8 puede reducir el tamaño del archivo entre un 70 y un 80% sin ningún cambio visible. Herramientas como pngquant lo detectan automáticamente.
Eliminación de metadatos
Los archivos PNG pueden contener metadatos en fragmentos de texto: tEXt, iTXt, zTXt y otros fragmentos auxiliares. Entre ellos están:
- Etiquetas de software — qué programa creó el archivo (Photoshop, GIMP, etc.)
- Fecha de creación — cuándo se creó o se modificó por última vez la imagen
- Autor y copyright — campos de texto incrustados
- Perfil de color ICC — puede ocupar desde 500 bytes hasta más de 800 KB en perfiles de gama amplia
- Datos privados de Photoshop — el software de Adobe incrusta datos de capas, referencias a objetos inteligentes e historial de edición que pueden ocupar bastante
Para publicar en la web, todos estos metadatos son un lastre innecesario. Eliminarlos produce un archivo más pequeño sin ningún cambio visual:
# Eliminar todos los metadatos con ImageMagick
magick input.png -strip output.png
# Eliminar con pngcrush (conserva solo los fragmentos críticos)
pngcrush -rem allb input.png output.png
# Eliminar con optipng (también optimiza la compresión)
optipng -strip all input.png -out output.png
El ahorro al eliminar metadatos suele ser de 1 a 5 KB en imágenes sencillas, pero puede llegar a 50–800 KB en archivos exportados desde Photoshop con perfiles ICC incrustados y fragmentos de datos privados.
Ajustes del nivel de compresión
El nivel de compresión PNG controla con qué intensidad busca patrones el algoritmo DEFLATE. Esto es lo que significa cada nivel en la práctica:
| Nivel | Velocidad de codificación | Tamaño del archivo | Uso |
|---|---|---|---|
| 0 | Instantánea | El más grande (sin compresión) | Depuración, procesamiento intermedio |
| 1–3 | Muy rápida | Grande | Procesamiento en tiempo real, archivos temporales |
| 4–6 | Moderada | Medio | Uso general (la mayoría de herramientas usan 6 por defecto) |
| 7–8 | Lenta | Pequeño | Publicación web, archivo |
| 9 | La más lenta | El más pequeño | Entrega final, recursos web |
La diferencia entre el nivel 6 (por defecto) y el nivel 9 (máximo) suele ser de un 2 a un 5% en tamaño de archivo. La diferencia en tiempo de codificación es más notable — el nivel 9 puede tardar de 5 a 10 veces más que el nivel 6 en imágenes grandes. En recursos web que codificas una vez y sirves millones de veces, el nivel 9 siempre compensa el tiempo extra de codificación.
El parámetro de calidad PNG de ImageMagick
ImageMagick codifica tanto el nivel de compresión como el tipo de filtro en un único parámetro -quality para PNG. La cifra de las decenas es el nivel de compresión zlib (0–9) y la de las unidades es el tipo de filtro (0–5):
# Compresión máxima, filtrado adaptativo
magick input.png -strip -quality 95 PNG:output.png
# Desglose: 9 = nivel de compresión 9, 5 = filtro adaptativo
# El filtro adaptativo prueba los 5 tipos de filtro en cada fila para obtener el mejor resultado
# Compresión rápida, sin filtrado
magick input.png -strip -quality 10 PNG:output.png
# Desglose: 1 = nivel de compresión 1, 0 = sin filtro
Mejor valor por defecto: usa -quality 95 para la salida PNG de ImageMagick. El 9 significa máximo esfuerzo de compresión y el 5 significa filtrado adaptativo (prueba todos los tipos de filtro en cada fila). Así se obtiene el archivo más pequeño a costa de una codificación más lenta.
Los tipos de filtro PNG, explicados
Antes de la compresión DEFLATE, PNG aplica a cada fila un filtro de predicción que transforma los datos de píxeles para que se compriman mejor. El filtro no cambia la imagen — es totalmente reversible. El objetivo es que los datos sean más repetitivos para que DEFLATE los comprima mejor.
| Filtro | ID | Método de predicción | Ideal para |
|---|---|---|---|
| None | 0 | Sin predicción (bytes sin procesar) | Imágenes con paleta (PNG-8), ruido aleatorio |
| Sub | 1 | Píxel menos el vecino de la izquierda | Degradados horizontales, patrones horizontales |
| Up | 2 | Píxel menos el píxel de arriba | Degradados verticales, patrones verticales |
| Average | 3 | Píxel menos la media del izquierdo + el de arriba | Zonas suaves, contenido fundido |
| Paeth | 4 | Píxel menos el predictor Paeth (el más cercano entre izquierdo, superior y superior izquierdo) | Imágenes naturales complejas |
| Adaptativo | 5 | Prueba todos los filtros en cada fila y elige el mejor | Todas las imágenes (mejor opción por defecto) |
El filtro adaptativo (a veces llamado "mixed" o "all") prueba los cinco tipos de filtro en cada fila de píxeles y elige el que produce la salida más comprimible. Este método de fuerza bruta casi siempre genera el archivo más pequeño, pero tarda más en codificar. Para la entrega web final, el filtrado adaptativo es siempre la opción correcta.
¿Cuánto importan los filtros?
Elegir mal el filtro puede inflar el tamaño del archivo entre un 10 y un 30%. Por ejemplo, usar el filtro "None" en una fotografía (donde los píxeles adyacentes se parecen) desperdicia gran parte del potencial de compresión. Por el contrario, usar "Sub" o "Paeth" en una imagen con paleta y valores de índice aleatorios puede hacer que el archivo sea incluso más grande que sin filtro.
Por eso el filtrado adaptativo es la opción segura por defecto — siempre elige el filtro adecuado para cada fila, aunque la imagen mezcle tipos de contenido (como una captura con texto y fotografías).
Optimización de la paleta de colores
La reducción más espectacular del tamaño de un PNG se consigue convirtiendo un PNG de 24 bits (16,7 millones de colores) en una paleta optimizada de 8 bits (256 colores). Herramientas como pngquant y pngnq usan algoritmos sofisticados para elegir los 256 mejores colores y aplican tramado (dithering) para simular los colores que faltan.
Cómo funciona pngquant
pngquant analiza la imagen para encontrar los 256 colores que mejor representan el original. En los píxeles que quedan entre dos colores de la paleta aplica el tramado Floyd-Steinberg — una técnica que reparte el error de color entre los píxeles vecinos y crea la ilusión de más colores mediante mezcla espacial.
# Optimización básica de paleta (256 colores, calidad 65-80)
pngquant 256 --quality=65-80 input.png -o output.png
# Optimización de paleta con la máxima calidad
pngquant 256 --quality=80-100 --speed 1 input.png -o output.png
# Convertir a un número concreto de colores
pngquant 64 input.png -o output.png # 64 colores
pngquant 16 input.png -o output.png # 16 colores (muy pequeño)
Resultados típicos de la optimización de paleta
| Tipo de imagen | Tamaño PNG-24 | PNG-8 (256 colores) | Ahorro | Impacto visual |
|---|---|---|---|---|
| Logotipo (12 colores) | 45 KB | 8 KB | 82% | Ninguno (sin pérdida) |
| Captura de interfaz | 380 KB | 95 KB | 75% | Tramado mínimo |
| Ilustración (colores planos) | 210 KB | 52 KB | 75% | De nulo a mínimo |
| Infografía con degradados | 620 KB | 180 KB | 71% | Tramado en los degradados |
| Fotografía | 8,5 MB | 2,1 MB | 75% | Tramado intenso (mejor usa JPG) |
Importante: la optimización de paleta es técnicamente con pérdida — reduce el número de colores disponibles. Sin embargo, en imágenes que ya usan menos de 256 colores distintos, la conversión es totalmente sin pérdida. En imágenes con algunos colores más, el tramado produce resultados visualmente indistinguibles del original a una distancia de visualización normal.
Comparativa de herramientas de optimización PNG
Varias herramientas especializadas van más allá de lo que ofrece ImageMagick para comprimir PNG. Cada una sigue un enfoque distinto:
| Herramienta | Tipo | Enfoque | Ahorro típico |
|---|---|---|---|
| optipng | Sin pérdida | Prueba varias combinaciones de filtro y compresión | 5–15% |
| pngcrush | Sin pérdida | Prueba por fuerza bruta todas las combinaciones de filtro y nivel | 5–15% |
| zopflipng | Sin pérdida | Codificador Zopfli de Google (salida DEFLATE más lenta y más pequeña) | 8–20% |
| pngquant | Con pérdida (paleta) | Reduce a una paleta de 256 colores con tramado | 60–80% |
| oxipng | Sin pérdida | Alternativa multihilo a optipng (Rust) | 5–15% |
Para obtener los mejores resultados, combina una herramienta con pérdida y otra sin pérdida: primero ejecuta pngquant (si la reducción de paleta es aceptable) y después zopflipng u optipng sobre el resultado para lograr la máxima compresión sin pérdida:
# Cadena de compresión máxima
pngquant 256 --quality=80-100 input.png -o temp.png
zopflipng temp.png output.png
rm temp.png
Cuándo la compresión PNG llega a su límite
Ninguna optimización de PNG puede superar una realidad fundamental: la compresión sin pérdida no puede competir con la compresión con pérdida en fotografías. No es un defecto de PNG — es una certeza matemática. Los algoritmos sin pérdida deben conservar cada píxel, mientras que JPEG descarta información que el ojo no percibe.
| Tipo de imagen | PNG optimizado | JPEG Q85 | PNG es más grande en |
|---|---|---|---|
| Foto de smartphone de 12 MP | 14,2 MB | 1,8 MB | 7,9x |
| Foto de réflex de 24 MP | 28,5 MB | 4,7 MB | 6,1x |
| Captura de pantalla 1080p | 850 KB | 240 KB | 3,5x |
| Logotipo sencillo (12 colores) | 8 KB | 22 KB | JPEG es 2,8x más grande |
| Icono de interfaz (colores planos) | 3 KB | 9 KB | JPEG es 3x más grande |
El patrón está claro:
- Fotografías e imágenes naturales complejas — conviértelas a JPEG. Ahorrarás de 3 a 8 veces sin pérdida de calidad perceptible a Q85.
- Gráficos sencillos, logotipos, iconos y capturas con mucho texto — quédate con PNG. Será más pequeño que JPEG y conservará los bordes nítidos a la perfección.
- Imágenes con transparencia — quédate con PNG (JPEG no admite transparencia). Considera WebP como alternativa, ya que admite tanto compresión con pérdida como transparencia.
La respuesta sincera: si tu PNG es una fotografía y lo que te preocupa es el tamaño del archivo, la mejor estrategia de "compresión PNG" es convertirlo a JPEG. Usa el conversor de arriba para pasar de PNG a JPG — normalmente verás una reducción de tamaño del 70 al 90% con una pérdida de calidad imperceptible.
Guía paso a paso para comprimir PNG
Este es un árbol de decisión práctico para reducir el tamaño de un PNG:
Paso 1: ¿tu imagen es una fotografía?
Si es así, conviértela a JPEG. Sube tu PNG al conversor de arriba; genera un JPG con calidad 92 y rellena de blanco cualquier transparencia. Es la acción más eficaz para los PNG fotográficos. Una fotografía PNG de 15 MB se convierte en un JPEG de 1 a 2 MB a Q85 sin diferencia visible.
Si no lo es (es un gráfico, un logotipo, un icono o una captura de pantalla), continúa con el paso 2.
Paso 2: ¿cuántos colores usa tu imagen?
Compruébalo con ImageMagick:
magick identify -verbose input.png | grep "Colors:"
Si tiene 256 colores o menos, conviértela a PNG-8 para ahorrar entre un 70 y un 80% sin ninguna pérdida de calidad:
magick input.png -strip -colors 256 -type Palette PNG8:output.png
Si tiene más de 256 colores, decide si es aceptable reducir la paleta con tramado o mantén PNG-24.
Paso 3: elimina los metadatos y maximiza la compresión
# Compresión máxima sin pérdida y eliminación de metadatos
magick input.png -strip -quality 95 PNG:output.png
Paso 4: considera herramientas especializadas para ahorrar aún más
# Optimización sin pérdida (sin ningún cambio de calidad garantizado)
optipng -o7 -strip all input.png -out output.png
# O reducción de paleta con pérdida (ahorro espectacular)
pngquant 256 --quality=80-100 input.png -o output.png
Compresión de PNG por lotes
Cuando necesitas comprimir una carpeta entera de archivos PNG, las herramientas de línea de comandos son la opción más rápida.
Compresión por lotes sin pérdida
# Linux / macOS: compresión máxima + eliminar metadatos
mkdir -p compressed
for f in *.png *.PNG; do
[ -f "$f" ] || continue
magick "$f" -strip -quality 95 "compressed/$f"
done
Optimización de paleta por lotes (pngquant)
# Reducir todos los PNG a una paleta de 256 colores
mkdir -p optimized
for f in *.png *.PNG; do
[ -f "$f" ] || continue
pngquant 256 --quality=80-100 "$f" -o "optimized/$f"
done
Windows PowerShell
New-Item -ItemType Directory -Force -Path ".\compressed"
Get-ChildItem *.png | ForEach-Object {
magick $_.FullName -strip -quality 95 (".\compressed\" + $_.Name)
}
Convertir PNG a JPG por lotes (máximo ahorro para fotos)
# Convertir todas las fotos PNG a JPEG Q85
mkdir -p jpg_output
for f in *.png *.PNG; do
[ -f "$f" ] || continue
magick "$f" -quality 85 -interlace Plane -strip "jpg_output/${f%.*}.jpg"
done
Cómo dejar un PNG por debajo de un límite de tamaño (por ejemplo, 5 MB)
El tamaño de un PNG depende sobre todo del número de píxeles y del contenido de la imagen. Como punto de partida, una imagen RGB de 8 bits sin comprimir ocupa ancho × alto × 3 bytes:
| Dimensiones | Píxeles | RGB sin comprimir |
|---|---|---|
| 4000 × 3000 | 12 MP | 36 MB |
| 3000 × 2250 | 6,75 MP | 20,3 MB |
| 2000 × 1500 | 3 MP | 9 MB |
| 1600 × 1200 | 1,92 MP | 5,8 MB |
Después, la compresión PNG lo reduce: un poco en las fotos y mucho en los gráficos planos. Si un PNG fotográfico sigue superando el límite con un tamaño que puedas aceptar, conviértelo a JPG o redúcelo a una paleta de 256 colores.