FileOptimizer

Ha pasado algo más de un año desde TBClamAV, y ya me empezaba a entrar el gusanillo de desarrollar otra cosa. Además, a pesar de lo capaz que era TBClamAV, obtuvo menos éxito del que me esperaba. Quiero creer que por la decreciente popularidad de The Bat!.

De manera que me propuse crear FileOptimizer o File Optimizer, un optimizador de archivos nativo para Windows, gratuito y de código abierto, que consiguiera reducir el tamaño de los mismos, sin pérdidas de calidad (lossless), a lo sumo, y de manera configurable, puede eliminar los metatags, pero ese es el único cambio que en apariencia externa realiza sobre los archivos, a pesar que a nivel interno se efectúen gran cantidad de manipulaciones.

Lo que me incitó a comenzarlo, fue que por un lado, las utilidades similares que había disponibles, como PNGGauntlet, ImageOptim, Trimage, o incluso PNGOutWin, en el mejor de los casos, eran capaces de optimizar unicamente JPEG, PNG y GIF. Algunas de ellas no estaban disponibles para Windows, y otras requerían .NET.

Para evitar todo ello, me puse manos a la obra con mi querido C++ Builder XE2, y en un fin de semana, cree una diminuta aplicación que como sus competidores, actuaba únicamente como interfaz de usuario amigable y fácil de utilizar, sobre programas de consola que eran los que hacían el trabajo duro de optimización.

Como de costumbre reutilicé el código genérico C++ Builder que incluyen casi todos mis programas, y liberé la primera versión, con soporte para APNG, MNG, JPEG, PNG, SWF y ZIP.

Poco menos de dos meses después, FileOptimizer va ya por la versión 1.70, y se ha transformado en un programa pequeño/mediano con aproximadamente 2000 lineas de código, y 70 horas de desarrollo invertidas entre análisis, investigación, programación, pruebas, documentación, mantenimiento web, y soporte. Soportando 17 formatos básicos (APNG, BMP, DLL, EXE, GIF, GZ, JPEG, MNG, MP3, OGG, OGV, PDF, PNG, SWF, TIFF, WEBP y ZIP), que derivan en casi 50 extensiones de archivo soportadas (AIR, APK, APNG, APPX, BMP, BPL, CBZ, DLL, DOCM, DOCX, DRV, DWFX, EPUB, EXE, GIF, GZ, ICO, IPA, JAR, JPEG, JPG, LZL, MNG, MP3, MPP, ODT, OGG, OGV, OXPS, PNG, PPTM, PPTX, PDF, PUB, SCR, SVGZ, SWF, SYS, TGZ, TIF, TIFF, VSD, WEBP, XAP, XLSM, XLSX, XPS, y ZIP).

El registro de cambios, indica que en total he liberado 9 actualizaciones, y 2 revisiones menores.

Por el camino, he realizado una compilación actualizada de Gifsicle 1.67, he actualizado los fuentes de jpegoptim 1.2.4 compilando una versión actualizada para Windows, he estudiado las especificiones internas de PNG/APNG, y me he puesto al día con la VCL de Embarcadero. También he desarrollado zRecompress, para recomprimir SWF tanto deflate como LZMA, y archivos GZ, así que he hecho ingeniería inversa, he estudiado ambos formatos, he recordado como funcionaba Zlib, y me analizado como funciona la interfaz de 7-Zip y el SDK de LZMA. Es decir, que agrupa en una sola herramienta, 20 programas de terceros, que persiguen una finalidad común: reducir el tamaño de los archivos, sin mermas de calidad.

Reconozco que incluso ahora, no hace todo lo que hacen los demás, algunas cosas por estar diseñadas explícitamente así, y que me siguen pareciendo lo adecuado (por ejemplo sobrrescribir los archivos de destino); y otras que aunque en efecto fueron concebidas de esa forma, han demostrado que con un leve cambio, habrían resultado más convenientes (como el soporte multihilo). Según varias pruebas independientes de usuarios, FileOptimizer no es solo la herramienta de este tipo que mayor cantidad de formatos soporta, sino que además, es desde el principio la que reduce en mayor proporción el tamaño de los archivos, eso si, a costa de un tiempo de ejecución superior.

En este caso, y con más de 10.000 descargas hasta el momento, mis expectativas se han visto superadas, y he aprendido como no se trata de desarrollar aplicaciones técnicamente avanzadas, sino de aplicaciones que funcionen mejor que las demás. En este sentido debo destacar la colaboración de los usuarios a todos los niveles, desde ofrecerme hosting gratuito, hasta sugerencias, reporte de errores, y contribuciones al código.

Todo este ajetreo, se ha completado con mi traspaso a Sourceforge en https://nikkhokkho.sourceforge.io, que espero sea finalmente un hogar duradero para FileOptimizer y para el resto.

El futuro, le puede reservar agradables sorpresas, soporte multihilo, versión Win64 con C++ Builder XE3, integración en la bandeja del sistema, barras de progreso en la barra de tareas para Windows 7 y superior, localización multiidioma, repositorio de versiones de código, … Pero lógicamente, ni siquiera yo mismo se con certeza lo que acabará incluyéndose, y es que a medida que crece el código, se hace más complicado y laborioso de mantener; a medida que se hace más popular, requiere más tiempo de soporte, y gestión. Todo ello, en dependencia directa con la cantidad de tiempo libre del que dispongo, que por lo visto, es cada vez menos…

En la página de descargas de Sourceforge, tenéis disponible tanto los fuentes, como los binarios, para que vosotros mismos podáis valorar si es que os apetece.



44 comentarios en “FileOptimizer”

  1. ¿Pero exactamente qué demonios hace para reducir los tamaños? Es decir, por sentido común se me ocurren varias cosas, las diré a ver si estoy acertado o no (por favor, corrígeme):
    * Comprimir IMÁGENES forzando mayor ratio de compresión al algoritmo (a costa de mas tiempo en apertura del archivo), o bien con otro algorimo más eficiente
    * Comprimir DOCUMENTOS e IMAGNEES borrando los meteadatos. Aquí no veo mucho ahorro (pero puedo estar equivocado). La pega es eso: perder esos metadatos.
    * Con los ARCHIVOS COMPRIMIDOS (.zip .gz…) ídem: op usar un algoritmo superior (para .zips comprimidos hace mucho, por ejemplo) o forzar un ratio mayor

    Y en general, ¿al hacer esto: no se perderá compatibilidad con otros programas (ej: visualizador de imágenes de una TV, que a lo mejor ya no serán capaces de leer el archivo)?

    Por lo demás, muy buen artículo.

  2. Interesantes dudas las que planteas Elreymon. La respuesta corta es que FileOptimizer, simplemente invoca a programas externos que son los que realizan la recompresión.

    La respuesta larga es más compleja ya que depende del tipo de archivos en cuestión.

    Por ejemplo para aquellos que usan compresión deflate (ZIP, GZ, PNG, APNG, MNG, …), lo que se hace es recomprimirlos con un algoritmo que requiere más tiempo de compresión, pero que ofrece un tamaño final más reducido, a costa de probar diferentes opciones. Contrariamente a lo que pueda parecer, esto hace que además se abran y se descompriman más velozmente, y que sean igualmente compatibles que los originales.

    MP3, OGG y OGV hacen algo similar, probando diferentes parámetros de compresión hasta encontrar el más idóneo, sólo que en este caso la compresión no es deflate.

    Para BMP, PNG y GIF, entre otras cosas, lo que se hace además es reducir la profundidad de bits de color a la necesaria para esa imagen. Si un PNG está guardado a 24 bits, pero en cambio usa menos de 256 colores, se puede codificar con 8 bits por pixel, ahorrando espacio.

    Adicionalmente para animaciones, tipo GIF animado, APNG o MNG, además se buscan fotogramas idénticos codificados varias veces, que quedan al final unificados, e incluso se vuelven a calcular las diferencias entre fotogramas para reducir el tamaño.

    Para SWF, o bien se recomprimen en deflate como hemos visto antes o bien se recomprimen con LZMA, que obtiene mejores tasas de compresión, a costa de requerir Flash Player 11.2 o superior.

    En archivos JPEG, se optimiza la compresión Huffman probando más combinaciones, o bien se utiliza compresión aritmética que ofrece mejores resultados.

    Para binarios EXE y DLL, se optimizan sus cabeceras, y se elimina información de depuración.

    En todos los casos, opcionalmente se puede eliminar metatags como EXIF, ID3, etc.

  3. I love this program but the only version I have been able to run is 1.70. I have downloaded version 2 & today I tried version 2.2 but unfortunately they both give the same error message: «Access violation at address 00000000. Read of address 00000000.» I am using Windows XP-SP3. The only files that I have been optimizing so far are pictures… usually jpg or png. Is there something special that I need to do? I want to be able to use newer & future versions of this awesome program; please help!

  4. Entre precisamente para reportar lo mismo que el compañero de arriba, XP SP3 tambien, asi que creo que por ahi van los derroteros. Saludos y me vuelvo a la version que me funcionaba hasta proximo aviso.

  5. Gracias por el comentario phbgjf. Hablando con Mark, mi teoría de que el fallo provenía de mis compilaciones de jpegoptim con Visual C++ 2012 y que no funcionan en Windows XP, ha quedado descartada.

    Lamentablemente, en mi máquina virtual con Windows XP SP3, todo funciona perfectamente, por lo que me inclino a pensar en una incompatibilidad con algún tipo de configuración en algunos sistemas como el vuestro, pero que no he sido capaz de reproducir.

  6. phbgjf and Mark, new version 2.30 is totally compatible with
    Windows XP again. The bug, even if hard to reproduce, was introduced in FileOptimizer 2.00, and is now fixed.

    phbgjf y Mark, la nueva versión 2.30, es ya totalmente compatible con Windows XP. El error, que ha sido difífil de reproducir, se introdujo en FileOptimizer 2.00, y ha quedado resuelto.

  7. saludos. la utilidad mas atractiva para mi como diseñador web es comprimir png. fue lo primero que fui a probar a penas descubrí este prometedor programa. pero resulta que al comprimir el png le quita su hermosos fondo transparente y lo pone NEGRO.

    http://screencast.com/t/Ay0oJmDV7

    De alguna manera el archivo si conserva su transparencia, El archivo es todavia usable en la web , pero Malas noticias!! cuando se abre el archivo en photoshop, la imagen antes con fondo transparente, ahora tiene el fondo negro, imposible de separar.

    será algo que no se?

  8. lo trataste de abrir en photoshjop?
    yo use photoshop cs6 y me puso la transparencia en negro.
    claro, en la web se ve bien pero en photoshop ya mas nunca se podra editar. curiosamente tambien picasa lo vio con fondo negro.

    no es una mega limitacion pero si una especie de contratiempo ya que habria que tener dos png en caso de que uno desee seguir manipulando el archivo en photoshop.

    en efecto esta que me envias tambien se ve asi:
    http://screencast.com/t/UvLV9wTiR

    toy usando windows 7 64 bits.

  9. He abierto la imagen que comenta rafael en Photoshop 5.5 64bits y efectivamente sale el fondo negro, sin embargo en el navegador si sale con fondo transparente.

    Salu2.

  10. Use for Bitmap (BMP) files Windows RLE Compression for example with loosless settings RLE Compressed, Bits per Pixel -> Select best; Palette: Optimized (to found in Hypersnap screenshot program as sample)

  11. o programa é muito bom, tenho de agradecer, ainda mais por necessitar de um programa de compressor de arquivos, está me sendo muito útil, mas, o nikkhokkho deve ser uma pessoa desprezível, que ganhar dinheiro com a criatividade alheia, mesmo essa ser de boa índole, pois, o programa quando abro está me pedindo para atualizá-lo, mas quando entro na pagina de atualização, não há downlad do fileoptimizer, e sim do 7Z, não quero, pois, tenho o winrar, não sei como atualizar o programa.

  12. Muito obrigado pelo seu comentário Antonio, e eu estou feliz que você gosta FileOptimizer.

    Na atualização de versão em http://sourceforge.net/projects/nikkhokkho/files/FileOptimizer/5.80.258/ tem tanto a versão ZIP, como o 7z auto-extraível (que não necessita de WinRAR ou outro programa).

    Além disso, não ganhar dinheiro com isso (http://www.javiergutierrezchamorro.com/por-que-fileoptimizer-es-gratuito-y-de-codigo-abierto/1905), e tirar proveito do trabalho dos outros, que, como você pode ver, eles recebem o devido crédito.

  13. Hello! Thanks for FileOptimiser – great app 🙂

    Just a couple of suggestions – IPA files (Apple downloads) can be packed since they are just uncompressed zips. When they’re transfered, they unzip on the phone so can just be set to ultra without any zipalign issues.

  14. Oh also, I’m not sure if different file-sizes inside the IPA are an issue to install because I never tried it. But possibly the PNG and JPG files inside could be optimized too.

    This would make a great commercial sweep tool for OSX 😀 – Halve the size of your itunes applications folder 🙂

  15. Thank you for your comments Pras.

    Yes, as you stay in your latest message IPA are supported, and indeed it is documented in both the official web page, as well as in the program itself inside the Information button.

    As for recursively optimizing contents inside packed files, it is a planned feature, that unfortunatelly will require lots of code rewritting so I am not sure when it could be implemented.

    Glad FileOptimizer worked fine for you!

  16. Hi Javier,

    I find your FileOptimizer a great little tool. I used to manually compress files using command line and this one is just great. Saves a lot of time.

    If you ever decide to take it to another level, I would recommend a couple of features:

    1. Include JavaScript, CSS and HTML minifiers.
    2. Include command line feature to automate tasks via batch files.

    Other than that, congratulations on the good work!

    Thanks
    Bhavin

  17. Hello Bhavin Doshi.

    Thank you very much for using FileOptimizer and your suggestions.

    Of course I still plan to work on FO. Unfortunatelly due to problems compiling with C++ Builder XE5, I will need to wait for XE6 to be released soon. Also my spare time is quite a bit limited those days.

    As for your first suggestion, I have been investigating on several command-line opensource or free tools to be integrated. Do you have any recommendation?

    In regards to your second point, command line processing is already supported. Please check the FAQ for How is the command line syntax?.

  18. Hi Javier,

    I use Microsoft Ajax Minifier (http://ajaxmin.codeplex.com/documentation) to compress javascript and CSS files. Ajax Minifier allows consolidation of multiple files into a single file as well. Source code is available for CSharp.NET.

    I wouldn’t bother much about HTML compression as most people use CMS now a days and rarely does someone manually code HTML. My suggestion was just a bit of a frill.

    YUI has been the most popular compressor out there. It however requires Java installed on your machine.

    Latest tool is Google Closure – http://code.google.com/closure/compiler/. This tool seems to check the code as well (haven’t tried). This will most likely take the lead over other tools going forward for serious coders who bother to optimize their scripts. This is available as java executable as well as a REST API. REST API is cool unless somebody wants the tool to work offline.

    FileOptimizer already supports command line is really cool. I will check that out.

    Many thanks and Cheers,
    Bhavin

  19. Thank you very much Bhavin Doshi.

    I was not aware of AJAXMin, so I will take a look to it.

    As for Google Closure, I already looked at it, main issue is it requiring Java to run, so it will make an additional dependency in FileOptimizer, which I want to avoid. The same applies to YUI compressor.

    Regards.

  20. Could you please make more changes in options? It would be great to have categories (file extensions, comma delimited lists) wich will fall in different optimisations. For example .ZIP files (Nokia Refocus/SmartCam .NAR, Java: .JAR, MS Office: DOCX, PPTX, PPSX, Opera extensions .OEX) / .JPEG files (.JPG, .JPE, .JPEG, THM). Since FileOptimizer dosen’t recognise files from content, only from extensions and user don’t have access to those list… would you? Thank you!

  21. Thanks you very much for your comment Jaff.

    JAR, DOCX, PPTX, PPSX, .JPG and JPEG were already supported. You can get an updated extension list on the Information button.

    In the meantime, I already added .NAR, JPE, and THM to the program, which will be available in the next release.

    I will add the support of customizable comma delimited extensions to my ToDo list.

    By the way, it would be better to followup, if you address issues and suggestions on the discussion area at Sourceforge’s project page.

    Kind Regards.

  22. Hola Guti, primero de todo date las gracias y la enhorabuena por tus programas, me son de mucha utilidad.
    Acabo de probar FILEOPTIMIZER y tengo un «problema», mi ordenador tiene Windows XP, todo funciona correctamente lo malo es que cuando programa realiza el optimizado de las imagenes, el monitor se pone negro y el ordenador no responde hasta que no acaba con todas la imagenes, eso significa que no puedo usarlo mientras se este ejecutando FILEOPTIMIZER, ¿eso debe ser así o es algun problema de mi ordenador?, gracias de nuevo.

  23. Es extraño Jesus. Regularmente lo voy probando con Windows XP SP3 sobre una máquina VirtualBox, y no he experimentado ese problema. Te ocurre justo cuando empieza a optimizar archivos, o al cabo de un rato, como si fuera el salvapantallas, o el modo de ahorro de energía del monitor?

  24. Gracias por contestar Guti, perdona que no te respondiera antes.
    Me ocurre cuando empieza a optimizar, el problema en si no es que la pantalla se quede en negro, es que queda como bloqueado y no puedo usarlo hasta que acaba de optimizar, las imagenes no pesan mucho, creo que la más grande es de unos 300 kb, pero la cantidad de imagenes que contiene la carpeta sí es importante, el tiempo que tarda en procesar todas las imagenes es relativametne alto y si necesito utilizar otra aplicacion durante ese tiempo de proceso no me es posible.

  25. A simple vista parece que tu equipo ande algo escaso de CPU o de memoria, para ejecutar alguno de los plugins que FileOptimizer requiere, Jesus. Si me das más detalles de tu PC, o alguna captura de pantalla del uso de recursos mientras está optimizando, te podré ayudar más.

    Otra cosa que puedes hacer, es bajar la prioridad del programa, lo tienes en las opciones. Ponla en el nivel más bajo Idle, que eso debería hacer que fuera más fluido, cediendo de vez en cuando recursos a otras tareas.

    Ya me contarás si mejora.

Deja un comentario