Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save alejandromunoz-es/adc413d8995d05fa7ced7352bb618977 to your computer and use it in GitHub Desktop.
Save alejandromunoz-es/adc413d8995d05fa7ced7352bb618977 to your computer and use it in GitHub Desktop.

Comprimir archivos al máximo en Linux

Cuanto mayor sea la compresión de un archivo, menos ocupa. Aquí pongo cómo optimizar la compresión de varios tipos de archivos por si le sirve a alguien.

Documentos

Portable Document Format (.pdf)

Hay que instalar ghostscript:

$ sudo apt install ghostscript

Individual

Con esta orden, que creo mejorable:

$ gs -q -dNOPAUSE -dBATCH -dSAFER -dNOPAUSE -dQUIET -dDetectDuplicateImages -dPDFA=2 -dPDFACompatibilityPolicy=1 -dSimulateOverprint=true -sDEVICE=pdfwrite -dCompatibilityLevel=1.3 -dPDFSETTINGS=/screen -dEmbedAllFonts=true -dSubsetFonts=true -dAutoRotatePages=/None -dColorImageDownsampleType=/Bicubic -dColorImageResolution=128 -dGrayImageDownsampleType=/Bicubic -dGrayImageResolution=128 -dMonoImageDownsampleType=/Bicubic -dMonoImageResolution=128 -sOutputFile=comprimido.pdf original.pdf

Una vez hecho esto, se puede comprimir un poquito más con pdftk:

$ sudo apt install pdftk

Usando esta orden:

$ pdftk comprimido.pdf output MásComprimido.pdf compress

Pero cuidado porque esta orden puede quitar la tabla de contenidos y el índice.

Por lotes

Busca todos los archivos pdf y los comprime en uno nuevo, pero creo que habría que mejorarlo para que modifique el original:

$ find . -name '*.pdf' | while read pdf; do gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -dDetectDuplicateImages -dCompressFonts=true -r150 -sOutputFile="${pdf}_new.pdf" "$pdf"; done

Epub

Ver este tutorial: https://github.com/readyready15728/misc/blob/master/epub-recompression.md

Imágenes

Graphics Interchange Format (.gif)

Hay que instalr gifsicle:

$ sudo apt install gifsicle

La orden para comprimir es:

$ gifsicle -b -n -O3 imagen.gif

Portable Network Graphics (.png)

Hay que instalar optipng:

$ sudo apt install optipng

La orden de comprimir es:

$ optipng -o7 -zm1-9 -clobber -fix -quiet -strip "all" imagen.png

Una vez hecho esto, podemos usar zopflipng, que se instala así:

# apt install zopfli

Y se usa así:

$ zopflipng -m -y comprimido.png más_comprimido.png

Joint Photographic Experts Group (.jpg y .jpeg)

Mi herramienta preferida es jpegoptim:

$ sudo apt install jpegoptim

Con esta orden:

$ jpegoptim --strip-all -m75 -v foto.jpg

Otra opción interesante es mozjpeg, que se puede usar con la herramienta cjpeg:

$ sudo apt install libjpeg-turbo-progs

Uso:

[Completar] Ver https://github.com/mozilla/mozjpeg/blob/master/usage.txt y https://hacks.mozilla.org/2014/08/using-mozjpeg-to-create-efficient-jpegs/

No contemplo guetzli porque comprime peor que las otras dos.

Más formas de comprimir imágenes

Aquí https://stackoverflow.com/questions/19153122/image-compression-tools-via-command-line

Archivos ya comprimidos

Muchas veces se puede reducir un poquito el tamaño de los archivos ya comprimidos.

Archivos .zip

Probablemente, el formato de compresión más usado. Los archivos .zip contienen otros ficheros que pueden comprimirse. Internamente, los archivos de OpenDocument (LibreOffice), los libros .epub y los ficheros de Microsoft Office (ooxml) no son más que archivos zip con la extensión cambiada.

Para comprimir estos archivos, mi herramienta favorita es advzip, que es parte del paquete advancecomp:

$ sudo apt install advancecomp

Se usa así:

$ advzip -z -p -4 -k -i 1000 archivo.zip

Archivo GNU ZIP (Gzip, .gz)

Hay que usar la herramienta zopfli porque crea archivos compatibles con Gzip, pero son más pequeños. Para instalarla:

$ sudo apt install zopfli

Primero hay que descomprimir el archivo .gz original y borrarlo; después se comprime con zopfli:

$ gunzip archivo.gz && rm archivo.gz && zopfli -i100 archivo

Archivos web

Extensible markup language (.xml)

Incluye todo lo que sea XML aunque tenga otra extensión:

  1. Scalable Vector Graphics (.svg)
  2. ATOM
  3. muchos más

Hay muchas herramientas con las que comprimir archivos xml, una de mis favoritas es htmlcompressor, que se puede descargar así:

$ wget -c https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/htmlcompressor/htmlcompressor-1.5.3.jar

Para usarla, hay que instalar antes una máquina virtual Java, así:

$ sudo apt install openjdk-11

En realidad, esta herramienta no comprime, sino minifica, es decir, elimina partes innecesarias de un archivo XML como espacios en blanco, cambios de línea, tabulaciones, comentarios..., que implica una reducción pequeña del tamaño del archivo. La orden es:

$ java -jar htmlcompressor-1.5.3.jar -t  original.xml -o comprimido.xml

HyperText markup language (.html y .htm)

También podemos usar htmlcompressor, pero la orden es algo distinta:

$ java -jar htmlcompressor-1.5.3.jar -t html -c utf-8 --simple-doctype --remove-style-attr --remove-link-attr --remove-script-attr --simple-bool-attr --remove-js-protocol --remove-surrounding-spaces max original.html -o comprimido.html

JavaScript (.js)

Podemos usar el yui-compressor:

$ sudo apt install yui-compressor

Y comprimimos con esta orden:

$ yui-compressor --compilation_level ADVANCED_OPTIMIZATIONS --js original.js --js_output_file comprimido.js
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment