Por qué comprimir archivos en un ZIP no los comprime realmente

La situación frustrante

Ya has estado ahí. Un colega te envía un informe PDF de 50 MB. Piensas que es demasiado grande para enviarlo por correo, así que lo metes en 7-Zip, subes la compresión a « ultra » y esperas. ¿El resultado? Un archivo de 49 MB. Lo envías de todos modos, el destinatario lo extrae y el archivo sigue teniendo 50 MB: ni un solo byte menos.

No es un capricho. Toma un MP4, un JPG o un PDF ya comprimido, mételo en un archivo ZIP y el tamaño apenas se mueve. Sin embargo, pasa el mismo 7-Zip por una carpeta de archivos TXT, BMP o CSV en bruto y el archivo puede reducirse a una décima parte de su tamaño original.

¿Por qué una diferencia tan dramática? La respuesta reside en una distinción que la mayoría de la gente nunca aprende: la compresión de archivo y la compresión de contenido son operaciones fundamentalmente distintas. Comprende la diferencia y dejarás de perder el tiempo comprimiendo archivos que se niegan a reducirse, y empezarás a recurrir a la herramienta adecuada en la situación adecuada.

Compresión de archivo: el arte del contenedor

La compresión de archivo opera a nivel de contenedor. Hace dos cosas: agrupa varios archivos en un único contenedor y aplica un algoritmo de compresión sin pérdida para eliminar la redundancia estadística del flujo de bytes.

Los formatos de archivo familiares (ZIP, 7Z, TAR.GZ, RAR) dependen todos de algoritmos similares bajo el capó. ZIP usa DEFLATE por defecto, que combina LZ77 y la codificación de Huffman. LZ77 busca secuencias de bytes repetidas y las reemplaza por referencias de distancia y longitud; la codificación de Huffman asigna luego códigos binarios más cortos a los caracteres más frecuentes y códigos más largos a los más raros. El formato 7Z de 7-Zip usa LZMA por defecto, que extiende LZ77 con codificación por rangos y admite ventanas de diccionario mucho más grandes, consiguiendo normalmente mejores ratios que DEFLATE.

Aquí está el punto crucial: la compresión de archivo nunca modifica el contenido de los archivos. Trata cada archivo como un flujo opaco de bytes y busca patrones estadísticos dentro de ese flujo. Al extraer un archivo ZIP, los archivos vuelven idénticos byte a byte a los originales: ni un solo píxel cambia.

Esto explica la situación inicial. Un PDF ya ha comprimido sus flujos de imagen y de fuentes con DEFLATE internamente. Un JPG es en sí mismo un formato comprimido. Un MP4 usa H.264 o H.265 para comprir los fotogramas de vídeo. Estos archivos ya han exprimido su redundancia, de modo que los algoritmos de archivo casi no tienen nada con lo que trabajar. En cambio, los mapas de bits BMP, el audio WAV sin comprimir y los archivos CSV de texto plano están llenos de repetición comprimible: ahí es donde la compresión de archivo brilla.

Donde la compresión de archivo realmente destaca es en eliminar la redundancia entre varios archivos. Supón que una carpeta contiene 100 capturas de pantalla, cada una con la misma marca de agua de logotipo y una barra de herramientas similar. El gran diccionario de LZMA puede identificar estas repeticiones entre archivos y lograr una compresión mucho mejor que comprimiendo cada archivo por separado. Por eso agrupar archivos en un único archivo es más eficiente que comprimirlos uno a uno.

Merece la pena entender aquí el papel del diccionario de compresión. Tanto DEFLATE como LZMA mantienen una ventana deslizante de datos vistos recientemente (el diccionario) frente a la que se cotejan los nuevos bytes. La ventana de DEFLATE está fijada en 32 KB, lo que limita la distancia a la que puede encontrar repeticiones. LZMA permite configurar diccionarios de 64 MB o más, lo que significa que un patrón que aparece en el primer archivo de un lote aún puede referenciarse cuando reaparece en el último. Por eso un único archivo grande con muchos archivos similares se comprime mucho mejor que muchos archivos pequeños: el diccionario dispone de más material y la redundancia entre archivos se captura. Cuando cada archivo se empaqueta por separado, cada archivo empieza con un diccionario vacío y la redundancia entre archivos se pierde por completo.

Compresión de contenido: reconstruir desde dentro

La compresión de contenido sigue otro camino. No le importa cuántos archivos tengas ni agrupa nada. En su lugar, se sumerge en la estructura interna de un único archivo y optimiza los datos según el tipo específico de ese archivo.

Las técnicas varían completamente según el tipo de archivo:

Las imágenes pueden remuestrearse (reducir un original de 4000×3000 a 1920×1080), recodificarse (convertir PNG a WebP o AVIF) o ver reducida su profundidad de color (24 bits a 8 bits indexado). Una foto de teléfono de 8 MB, con ajustes sensatos de resolución y calidad, se comprime rutinariamente a menos de 500 KB sin diferencia visible a la vista.

Los PDF pueden tener sus imágenes incrustadas submuestreadas, sus flujos de fuentes sin comprimir convertidos a CFF subconjunto, sus objetos no referenciados eliminados y sus XObjects duplicados fusionados. Un documento de diseño de 50 MB lleno de ilustraciones de alta resolución suele poder reducirse a 5-8 MB tras la compresión de contenido.

Los PDF son un ejemplo especialmente ilustrativo porque son esencialmente contenedores ellos mismos. Un PDF almacena cada imagen como un objeto de flujo, cada fuente como otro flujo y el texto como flujos de contenido codificado. La mayoría de los productores ya aplican DEFLATE a los flujos de texto y fuentes, y JPEG o DCT a las imágenes fotográficas. Por eso un PDF pasado por una herramienta de archivo apenas se reduce: la parte fácil ya está hecha. La compresión de contenido, en cambio, reexamina cada flujo: submuestrea las imágenes cuya resolución excede lo que necesita la pantalla de destino, convierte los flujos de imagen sin pérdida a JPEG cuando es aceptable, descarta metadatos como miniaturas incrustadas y capas ocultas, y aplana los XObjects de formulario duplicados. El resultado no es un envoltorio más estrecho alrededor de los mismos datos; es un documento fundamentalmente más ligero.

Las fuentes pueden subconjuntarse, conservando solo las pocas decenas de glifos realmente usados en un documento en lugar de enviar un archivo de fuente entero con decenas de miles de caracteres.

El vídeo y el audio pueden recodificarse con códecs más eficientes: pasar de H.264 a H.265, por ejemplo, reduce aproximadamente a la mitad el bitrate con calidad equivalente.

La compresión de contenido tiene una característica definitoria: modifica los datos internos del archivo y, con frecuencia, es con pérdida. Una imagen comprimida no puede restaurarse a sus píxeles originales; una fuente subconjuntada no puede reensamblarse en una tipografía completa. La contrapartida es que el archivo se vuelve más pequeño en el origen: no hace falta extraerlo, está listo para usarse tal cual.

Una comparación visual

El diagrama siguiente ilustra la diferencia fundamental de flujo de trabajo entre los dos enfoques:

Archive compression vs content compression difference flowchart: 7-Zip packaging path vs content-level compression path

El camino de la izquierda es un ciclo « agrupar–transmitir–extraer–restaurar » donde el contenido de los archivos nunca cambia. El camino de la derecha es un proceso unidireccional « analizar–optimizar–generar » donde el propio archivo se reconstruye.

Ejemplos de código: ver la diferencia

Python deja la distinción perfectamente clara.

Compresión de archivo con zipfile


import zipfile
import os

# Compresión de archivo: agrupar varios archivos en un único zip
source_files = ['report.pdf', 'photo.jpg', 'data.csv']
archive_name = 'bundle.zip'

with zipfile.ZipFile(archive_name, 'w', zipfile.ZIP_DEFLATED) as zf:
    for file in source_files:
        zf.write(file)

# Medir el resultado
original = sum(os.path.getsize(f) for f in source_files)
packed = os.path.getsize(archive_name)
print(f"Original total: {original / 1024 / 1024:.2f} MB")
print(f"Archive size:   {packed / 1024 / 1024:.2f} MB")
print(f"Ratio: {packed / original * 100:.1f}%")

# Resultado típico (archivos ya en formatos comprimidos):
# Original total: 58.30 MB
# Archive size:   57.10 MB
# Ratio: 97.9%

Observa el ratio: casi sin cambios. Como estos archivos ya están en formatos comprimidos, la compresión de archivo es impotente.

Compresión de contenido con PIL


from PIL import Image
import os

# Compresión de contenido: optimizar los propios datos de la imagen
src = 'photo.jpg'
dst = 'photo_optimized.jpg'

img = Image.open(src)
before = os.path.getsize(src)

# Compresión de contenido en tres frentes
img.thumbnail((1920, 1080))  # reducir resolución
img.save(dst, 'JPEG',
         quality=75,        # menor calidad
         optimize=True,     # optimizar tablas de Huffman
         progressive=True)  # codificación progresiva

after = os.path.getsize(dst)
print(f"Original size: {before / 1024 / 1024:.2f} MB")
print(f"Optimized size: {after / 1024:.2f} KB")
print(f"Ratio: {after / before * 100:.1f}%")

# Resultado típico:
# Original size: 8.20 MB
# Optimized size: 480.50 KB
# Ratio: 5.7%

Misma palabra (« compresión »), sin embargo una convierte 58 MB en 57 MB mientras que la otra convierte 8 MB en 480 KB. La diferencia radica en lo que cada una toca: la primera solo reorganiza el contenedor; la segunda reescribe el contenido.

Comparación de un vistazo

DimensiónCompresión de archivoCompresión de contenido
Qué haceAgrupa archivos y elimina la redundanciaOptimiza los datos internos de un archivo
ObjetivoContenedor de archivos (nivel multiarchivo)Contenido del archivo (nivel de datos)
MétodoDEFLATE / LZMA y otros algoritmos sin pérdidaRemuestreo / transcodificación / subconjunto
PérdidaSin pérdida; totalmente recuperable al extraerGeneralmente con pérdida; no reversible
UsoDebe extraerse antes de usarseSe usa directamente, sin extracción
Escenario típicoTransferir varios archivos, copias de seguridadReducir tamaño, optimización web, adjuntos de correo
EficaciaDepende de la redundancia; casi nula en archivos ya comprimidosPuede alcanzar ratios de compresión de 10x o más

Caso de estudio: dos destinos de un PDF de 50 MB

Toma un PDF real de 50 MB (varias páginas de imágenes escaneadas en alta resolución) y compara:

Enfoque A: compresión de archivo

  • Herramienta: 7-Zip, LZMA2 ultra
  • Resultado: 50 MB → 49,2 MB
  • Por qué: los flujos de imágenes internos del PDF ya están comprimidos en JPEG con DCTDecode, y los flujos de fuentes usan FlateDecode. La compresión de archivo no encuentra redundancia que explotar.

Enfoque B: compresión de contenido

  • Operaciones: submuestrear las imágenes incrustadas a 150 DPI, bajar la calidad JPEG a 75, subconjuntar las fuentes, eliminar objetos no referenciados
  • Resultado: 50 MB → 6,8 MB
  • Por qué: la compresión apunta al grueso del PDF: los escaneos de alta resolución. A 150 DPI, la lectura en pantalla parece virtualmente idéntica y, sin embargo, el archivo es siete veces más pequeño.

Las dos « compresiones » producen una diferencia de 7x. Si tu objetivo es enviar ese PDF por correo, el Enfoque B es la respuesta; el Enfoque A solo desperdicia esfuerzo.

Elegir el enfoque adecuado

Con ambas herramientas en la mano, la decisión se vuelve sencilla. Pregúntate qué intentas conseguir:

  • ¿Necesitas mover muchos archivos a la vez? Recurre a la compresión de archivo. Agrupa, verifica y exprime la redundancia entre archivos en un solo paso: ideal para copias de seguridad, distribución de código fuente y transferencia de estructuras de carpetas.
  • ¿Necesitas que un único archivo sea más pequeño? Recurre a la compresión de contenido. Un PDF de 50 MB destinado al correo no se reducirá en un ZIP, pero sí se reducirá drásticamente una vez que sus imágenes internas se submuestreen.
  • ¿Necesitas ambas? Aplica primero la compresión de contenido a cada archivo y luego agrupa los resultados con la compresión de archivo. El orden no es negociable: la optimización del contenido debe ocurrir mientras los elementos internos del archivo siguen accesibles, antes de quedar sellados dentro de un archivo.

Un modelo mental útil: la compresión de archivo reduce el coste del transporte, mientras que la compresión de contenido reduce el coste del almacenamiento. Si tu archivo ya es lo bastante pequeño para transportarlo pero vive permanentemente en un servidor, la compresión de contenido se rentabiliza en ancho de banda ahorrado en cada descarga. Si solo estás enviando un lote de archivos una vez, la compresión de archivo es la opción más ligera.

Preguntas frecuentes

P1: ¿Por qué 7-Zip apenas reduce los PDF, JPG o MP4?

Porque estos archivos ya son formatos comprimidos. Los PDF comprimen los flujos de imágenes y fuentes internamente con DEFLATE; los JPG comprimen los datos de imagen con transformadas DCT; los MP4 comprimen los fotogramas de vídeo con H.264/H.265. Los algoritmos de archivo se enfrentan a datos ya exprimidos, por lo que no queda redundancia estadística que eliminar. La compresión de archivo es eficaz con datos en bruto sin comprimir: BMP, WAV, texto plano.

P2: ¿La compresión de contenido pierde calidad? ¿Cómo equilibro tamaño y calidad?

La mayoría de la compresión de contenido es con pérdida, pero el grado de pérdida es controlable. Para las imágenes, intercambias tamaño por nitidez ajustando resolución y calidad: 72-96 DPI a calidad 75 suele bastar para pantallas, mientras que la impresión exige 300 DPI. El subconjunto de fuentes es sin pérdida y no afecta a la visualización. La clave está en adaptar el nivel de compresión al caso de uso, no en aplicar un ajuste universal.

P3: ¿Pueden usarse juntas la compresión de archivo y la de contenido?

Sí, y de hecho suelen usarse juntas. El flujo de trabajo típico: aplicar primero la compresión de contenido para reducir cada archivo en el origen, y luego la compresión de archivo para agrupar los archivos más pequeños para la transferencia. El orden importa: primero contenido, luego archivo. Invertir el orden bloquea la estructura del archivo dentro del contenedor, impidiendo que la compresión de contenido intervenga. Optimiza primero el contenido y luego agrupa, y aprovecharás las ventajas de ambas.

Conclusión

La compresión de archivo y la compresión de contenido comparten el nombre de « compresión », pero operan en capas distintas. La compresión de archivo actúa a nivel de contenedor: agrupa y elimina la redundancia sin pérdida, con un efecto limitado en archivos ya comprimidos. La compresión de contenido actúa a nivel de datos: reconstruye los elementos internos del archivo, a menudo con pérdida, pero lo reduce en el origen.

La próxima vez que te encuentres ante un archivo « comprimido » que no se ha hecho más pequeño, pregúntate: ¿estoy comprimiendo el contenedor o el contenido? Elige la capa correcta y la compresión por fin hará su trabajo.

Lecturas relacionadas:

¿Necesita comprimir archivos? Pruebe SmartSlim

Basado en un motor de compresión Rust de desarrollo propio, soporta más de 40 formatos en 10 categorías como PDF, imágenes, vídeo, Office y OFD. La compresión se realiza localmente y los datos no salen de su dominio.