La compresión PNG es fundamentalmente sin pérdida
Lo más importante para entender sobre PNG: el nivel de compresión no afecta la calidad. Un PNG guardado en nivel de compresión 1 y un PNG guardado en nivel de compresión 9 producen exactamente la misma imagen cuando se abren. Cada píxel es idéntico, bit por bit.
PNG usa el algoritmo DEFLATE (el mismo detrás de gzip y archivos ZIP) para comprimir datos de píxeles. Cuando ajustas el nivel de "compresión", controlas cuán duro busca el codificador patrones repetidos y estrategias óptimas de codificación. Los niveles más altos significan:
- Archivos más pequeños — el codificador encuentra formas más eficientes de representar los mismos datos
- Codificación más lenta — se requiere más cálculo para encontrar esas eficiencias
- Descompresión idéntica — sin importar el nivel, los píxeles decodificados son iguales
Esto es fundamentalmente diferente a JPEG, donde la configuración de calidad controla directamente cuántos datos visuales se descartan permanentemente. Con PNG, nada se descarta nunca. La pregunta de "calidad" es simplemente: ¿cuánto tiempo de CPU estás dispuesto a gastar para exprimir algunos bytes más?
Concepto clave: Nivel de compresión PNG = esfuerzo de codificación, no calidad. Nivel 9 no significa "calidad inferior" — significa "tratar más duro de encontrar una representación más pequeña de los mismos datos".
PNG-8 vs PNG-24 vs PNG-32
La forma más efectiva de reducir el tamaño del archivo PNG es elegir el subtipo PNG correcto para tu imagen. La diferencia entre estos tipos puede significar una reducción de tamaño de 3 a 5 veces con cambio mínimo o nulo visible.
| Tipo | Profundidad de color | Colores | Transparencia | Tamaño típico |
|---|---|---|---|---|
| PNG-8 | 8 bits (paleta indexada) | Hasta 256 | 1 bit (activado/desactivado) o alfa de 8 bits | Más pequeño |
| PNG-24 | 24 bits (RGB) | 16,7 millones | Ninguno | Medio |
| PNG-32 | 32 bits (RGBA) | 16,7 millones | Alfa de 8 bits completo | Más grande |
PNG-8: El arma secreta para archivos pequeños
PNG-8 almacena cada píxel como un índice en 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 3 a 5 veces más pequeños que los 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 5 a 15 colores
- Ilustraciones simples — diagramas, gráficos, infografías con áreas de color plano
- Capturas de pantalla de interfaces ricas en 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; reducir a 256 causa bandas visibles
- Gradientes suaves — 256 colores no pueden representar un gradiente suave sin pasos visibles
- Imágenes que requieren semitransparencia — PNG-8 estándar solo admite píxeles completamente transparentes u opacos (aunque algunas herramientas admiten alfa de 8 bits en modo indexado)
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 en PNG-32 lleva un byte adicional para transparencia, haciendo que los archivos sean 25 a 33% más grandes que PNG-24. Si tu imagen no necesita transparencia (sin áreas transparentes o semitransparentes), guárdala como PNG-24 para evitar la sobrecarga de un canal alfa sin usar.
Ganancia rápida: Si tienes una imagen PNG-24 que usa solo 50 colores distintos (común para maquetas de interfaz y diagramas), la conversión a PNG-8 puede reducir el tamaño del archivo en 70 a 80% sin cambio visible. Las herramientas como pngquant detectan esto automáticamente.
Eliminación de metadatos
Los archivos PNG pueden contener metadatos en fragmentos de texto: tEXt, iTXt, zTXt y otros fragmentos auxiliares. Estos incluyen:
- Etiquetas de software — qué programa creó el archivo (Photoshop, GIMP, etc.)
- Marca de tiempo de creación — cuándo se creó o modificó la imagen por última vez
- Autor y derechos de autor — campos de texto incrustados
- Perfil de color ICC — puede ser de 500 bytes a 800 KB+ para perfiles de gama amplia
- Datos privados de Photoshop — el software Adobe incrusta datos de capa, referencias de objetos inteligentes e historial de edición que pueden ser sustanciales
Para la entrega web, todos estos metadatos son sobrecarga innecesaria. El stripping produce un archivo más pequeño con cambio visual cero:
# Eliminar todos los metadatos con ImageMagick
magick input.png -strip output.png
# Eliminar con pngcrush (preserva solo 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
Los ahorros de la eliminación de metadatos son típicamente 1 a 5 KB para imágenes simples, pero pueden ser 50 a 800 KB para archivos exportados de Photoshop con perfiles ICC incrustados y fragmentos de datos privados.
Configuración de niveles de compresión
El nivel de compresión PNG controla qué tan agresivamente busca el algoritmo DEFLATE patrones. Aquí es lo que cada nivel significa en la práctica:
| Nivel | Velocidad de codificación | Tamaño de archivo | Caso de uso |
|---|---|---|---|
| 0 | Instantáneamente | Más grande (sin compresión) | Depuración, procesamiento intermedio |
| 1 a 3 | Muy rápido | Grande | Procesamiento en tiempo real, archivos temporales |
| 4 a 6 | Moderado | Medio | Uso general (la mayoría de herramientas por defecto 6) |
| 7 a 8 | Lento | Pequeño | Entrega web, archivamiento |
| 9 | Más lento | Más pequeño | Entrega final, activos web |
La diferencia entre nivel 6 (por defecto) y nivel 9 (máximo) es típicamente 2 a 5% en tamaño de archivo. La diferencia en tiempo de codificación es más significativa — nivel 9 puede tomar 5 a 10 veces más que nivel 6 para imágenes grandes. Para activos web donde codificas una vez y sirves millones de veces, el nivel 9 siempre vale el tiempo de codificación adicional.
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. El dígito de decenas es el nivel de compresión zlib (0 a 9), y el dígito de unidades es el tipo de filtro (0 a 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 por fila para resultados óptimos
# 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 predeterminado: Usa -quality 95 para salida PNG de ImageMagick. El 9 significa esfuerzo máximo de compresión, y 5 significa filtrado adaptativo (prueba todos los tipos de filtro por fila). Esto produce el archivo más pequeño al costo de una codificación más lenta.
Tipos de filtros PNG explicados
Antes de la compresión DEFLATE, PNG aplica un filtro de predicción por fila que transforma datos de píxeles para hacerlos más compresibles. El filtro no cambia la imagen — es completamente reversible. El objetivo es hacer que los datos sean más repetitivos para que DEFLATE pueda comprimirlos mejor.
| Filtro | ID | Método de predicción | Mejor para |
|---|---|---|---|
| Ninguno | 0 | Sin predicción (bytes crudos) | Imágenes paleteadas (PNG-8), ruido aleatorio |
| Sub | 1 | Píxel menos vecino izquierdo | Gradientes horizontales, patrones horizontales |
| Arriba | 2 | Píxel menos píxel arriba | Gradientes verticales, patrones verticales |
| Promedio | 3 | Píxel menos promedio de izquierda + arriba | Áreas suaves, contenido mezclado |
| Paeth | 4 | Píxel menos predictor Paeth (más cercano de izquierda, arriba, arriba-izquierda) | Imágenes naturales complejas |
| Adaptativo | 5 | Prueba todos los filtros por fila, elige el mejor | Todas las imágenes (mejor predeterminado) |
El filtro adaptativo (a veces llamado "mixto" o "todos") prueba los cinco tipos de filtro para cada fila de píxeles y elige el que produce la salida más compresible. Este enfoque de fuerza bruta casi siempre produce el archivo más pequeño pero toma más tiempo para codificar. Para la entrega web final, el filtrado adaptativo es siempre la opción correcta.
¿Cuánto importan los filtros?
La opción incorrecta de filtro puede inflar el tamaño del archivo en 10 a 30%. Por ejemplo, usar filtro "Ninguno" en una fotografía (donde los píxeles adyacentes son similares) desperdicia potencial de compresión significativo. Inversamente, usar "Sub" o "Paeth" en una imagen paleteada con valores de índice aleatorios puede hacer que el archivo sea más grande que sin filtro.
Por eso el filtrado adaptativo es la opción predeterminada segura — siempre elige el filtro correcto para cada fila, incluso si la imagen contiene tipos de contenido mixtos (como una captura de pantalla con texto y fotografías).
Optimización de paleta de colores
La reducción más dramática de tamaño PNG proviene de convertir PNG de 24 bits (16,7 millones de colores) a una paleta optimizada de 8 bits (256 colores). Herramientas como pngquant y pngnq utilizan algoritmos sofisticados para seleccionar los mejores 256 colores y aplicar tramado para simular los colores faltantes.
Cómo funciona pngquant
pngquant analiza la imagen para encontrar los 256 colores que mejor representan la original. Para píxeles que caen entre colores de paleta, aplica tramado Floyd-Steinberg — una técnica que distribuye el error de color a píxeles vecinos, creando la ilusión de más colores a través de mezcla espacial.
# Optimización de paleta básica (256 colores, calidad 65-80)
pngquant 256 --quality=65-80 input.png -o output.png
# Optimización de paleta de máxima calidad
pngquant 256 --quality=80-100 --speed 1 input.png -o output.png
# Convertir a número específico 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 optimización de paleta
| Tipo de imagen | Tamaño PNG-24 | PNG-8 (256 colores) | Ahorros | Impacto visual |
|---|---|---|---|---|
| Logo (12 colores) | 45 KB | 8 KB | 82% | Ninguno (sin pérdida) |
| Captura de pantalla de interfaz | 380 KB | 95 KB | 75% | Tramado mínimo |
| Ilustración (colores planos) | 210 KB | 52 KB | 75% | Ninguno a mínimo |
| Infografía con gradientes | 620 KB | 180 KB | 71% | Tramado en gradientes |
| Fotografía | 8,5 MB | 2,1 MB | 75% | Tramado pesado (usar JPG en su lugar) |
Importante: La optimización de paleta es técnicamente con pérdida — reduce el número de colores disponibles. Sin embargo, para imágenes que ya usan menos de 256 colores distintos, la conversión es perfectamente sin pérdida. Para imágenes con un poco más de colores, el tramado produce resultados que son visualmente indistinguibles del original a distancias de visualización normales.
Herramientas de optimización PNG comparadas
Varias herramientas especializadas van más allá de lo que ImageMagick ofrece para compresión PNG. Cada una toma un enfoque diferente:
| Herramienta | Tipo | Enfoque | Ahorros típicos |
|---|---|---|---|
| optipng | Sin pérdida | Prueba múltiples combinaciones de filtro/compresión | 5 a 15% |
| pngcrush | Sin pérdida | Prueba por fuerza bruta de todos los combos filtro/nivel | 5 a 15% |
| zopflipng | Sin pérdida | Algoritmo Zopfli de Google (mejor que DEFLATE) | 8 a 20% |
| pngquant | Con pérdida (paleta) | Reduce a paleta de 256 colores con tramado | 60 a 80% |
| oxipng | Sin pérdida | Alternativa multihilo de optipng (Rust) | 5 a 15% |
Para los mejores resultados, combina una herramienta con y sin pérdida: primero ejecuta pngquant (si la reducción de paleta es aceptable), luego ejecuta zopflipng u optipng en el resultado para máxima compresión sin pérdida:
# Pipeline de compresión máxima
pngquant 256 --quality=80-100 input.png -o temp.png
zopflipng temp.png output.png
rm temp.png
Cuando la compresión PNG alcanza sus límites
Ninguna cantidad de optimización PNG puede superar la realidad fundamental: la compresión sin pérdida no puede competir con la compresión con pérdida para fotografías. Esto no es un defecto en PNG — es una certeza matemática. Los algoritmos sin pérdida deben preservar cada píxel, mientras que JPEG descarta información que el ojo no puede percibir.
| Tipo de imagen | PNG optimizado | JPEG Q85 | PNG es más grande por |
|---|---|---|---|
| Foto de smartphone 12 MP | 14,2 MB | 1,8 MB | 7,9x |
| Foto DSLR 24 MP | 28,5 MB | 4,7 MB | 6,1x |
| Captura de pantalla 1080p | 850 KB | 240 KB | 3,5x |
| Logo simple (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 es claro:
- Fotografías e imágenes naturales complejas — convertir a JPEG. Ahorrarás 3 a 8 veces sin pérdida de calidad perceptible a Q85.
- Gráficos simples, logotipos, iconos, capturas de pantalla ricas en texto — mantente con PNG. Será más pequeño que JPEG y preservará bordes afilados perfectamente.
- Imágenes con transparencia — mantente con PNG (JPEG no soporta transparencia). Considera WebP como una alternativa que soporta tanto compresión con pérdida como transparencia.
La respuesta honesta: Si tu PNG es una fotografía y el tamaño de archivo es tu preocupación, la mejor estrategia de "compresión PNG" es convertir a JPEG. Usa el convertidor arriba para ir de PNG a JPG — típicamente verás una reducción de tamaño de 70 a 90% con pérdida de calidad imperceptible.
Guía paso a paso de compresión PNG
Aquí hay un árbol de decisión práctico para reducir el tamaño del archivo PNG:
Paso 1: ¿Tu imagen es una fotografía?
Si sí, convierte a JPEG. Sube tu PNG al convertidor arriba y selecciona JPG como formato de salida. Esta es la acción más efectiva para PNG de fotos. Un PNG de fotografía de 15 MB se convierte en un JPEG de 1 a 2 MB a Q85 sin diferencia visible.
Si no (es un gráfico, logo, icono o captura de pantalla), ve al paso 2.
Paso 2: ¿Cuántos colores usa tu imagen?
Verifica con ImageMagick:
magick identify -verbose input.png | grep "Colors:"
Si 256 o menos colores: convierte a PNG-8 para ahorros de 70 a 80% sin pérdida de calidad:
magick input.png -strip -colors 256 -type Palette PNG8:output.png
Si más de 256 colores: decide si la reducción de paleta con tramado es aceptable, o mantén PNG-24.
Paso 3: Elimina metadatos y maximiza la compresión
# Compresión máxima sin pérdida con eliminación de metadatos
magick input.png -strip -quality 95 PNG:output.png
Paso 4: Considera herramientas especializadas para más ahorros
# Optimización sin pérdida (cambio de calidad cero garantizado)
optipng -o7 -strip all input.png -out output.png
# O reducción de paleta con pérdida (ahorros dramáticos)
pngquant 256 --quality=80-100 input.png -o output.png
Compresión PNG por lote
Cuando necesitas comprimir una carpeta completa de archivos PNG, las herramientas de línea de comando son el enfoque más rápido.
Compresión por lote sin pérdida
# Linux / macOS: compresión máxima + eliminación de 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 lote (pngquant)
# Reducir todos los PNG a 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 lote (máximos ahorros 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