|
Portable Network Graphics |
![]() |
Original article you can find here http://pmt.sourceforge.net/pngcrush/
Pngcrush es un
optimizador de archivos PNG (Portable Network Graphics). Se puede
ejecutar desde una línea de comandos de una ventana de MS-DOS, o desde
una línea de comandos UNIX o LINUX.
Su propósito
principal es reducir el tamaño de la corriente de datos PNG IDAT probando
varios niveles de compresión y métodos de filtro PNG.
También se puede utilizar para quitar fragmentos auxiliares no deseados,
o añadir ciertos fragmentos incluyendo gAMA, tRNS, iCCP, y fragmentos de
texto.
Cuando Pngcrush
está estáticamente acoplado al código suministrado zlib,
se entiende como inmune al bug zlib-1.1.3 "double-free", ya que por
defecto detecta y rechaza cualquier intento de "double-free".
Simplemente genera el mensaje "Error de descompresión" y
rechaza el archivo.
Pngcrush es una
fuente abierta y puede ser utilizada, modificada y redistribuida por cualquier
persona sin tener que pagar una cuota. La licencia, incrustada en el archivo pngcrush.c,
es equivalente pero no idéntica a la licencia libpng encontrada en el
archivo libpng png.h.
El código de
la fuente para pngcrush está aquí y los ejecutables binarios,
hechos por voluntarios de terceros y los que no siempre están
actualizados, están aquí. Pngcrush utiliza libpng y zlib, los
cuales están incluidos en esta distribución de la fuente pngcrush. Están ligeramente
modificados:
-
pngconf.h
de libpng está modificado a "#include
pngcrush.h" que se
utiliza
para "#define out" las partes no utilizadas de la biblioteca
#define PNG_SETJMP_NOT_SUPPORTED
#define
PNG_ABORT ()
para configurar
el tamaño del búfer IDAT en un valor más grande, y
-
zlib
está modificado para establecer el macro TOO_FAR a 32.767 en deflate.c
Si lo prefieres,
puedes compilar solamente pngcrush.c de la distribución de la fuente
pngcrush y ejecutarlo con los valores libpng y zlib, que se puede encontrar en la
página web de PNG, www.libpng.org/pub/png/. Si lo haces,
-
El
fragmento iTXt no será compatible si tu versión de libpng no lo acepta.
Libpng comenzará a sostener el fragmento iTXt por defecto con la
versión 1.4.0.
-
pngcrush
será vulnerable a diversas condiciones de overflow que se fijaron en
agosto de 2004, si utilizas una versión libpng sin parchear anterior a
la versión 1.2.7 / 1.0.17.
-
pngcrush
será vulnerable al bug zlib-1.1.3 double-free,
si enlazas pngcrush con zlib-1.1.3 y una versión de libpng como
cualquiera 1.0.x que no tiene PNG_USER_MEM_SUPPORTED habilitado.
-
TOO_FAR
será 4096 en lugar de 32.767 en deflate.c, que conducirá a los
archivos un poco más grandes y la ejecución ligeramente
más rápida.
-
Tampoco
serás capaz de leer los archivos erróneos PNG con
"Demasiados IDAT's".
Binarios
precompilados para Windows (se ejecuta en la ventana de MS-DOS, hecha bajo
DJGPP) y plataformas RISCOS (todos quizá no actualizados) están
aquí
Existe una bifurcación
del desarrollo de pngcrush, por Cosmin Truta, con un conjunto de
características ligeramente diferentes y con el espacio de
búsqueda. Ver http://www.cs.toronto.edu/~cosmin/pngtech/optipng/ "
Pngcrush es una
aplicación de línea de comandos. Si prefieres una interfaz
gráfica de usuario GUI, varias están disponibles, incluyendo estas
que han incrustado pngcrush junto con otros compresores y optimizadores de
imagen de línea de comandos:
-
ImageOptim para Macs, libre, licencia GPLv2
-
Trimage
para Linux, Windows, Mac, libre, licencia MIT
El autor de
pngcrush es Glenn Randers-Pehrson, glennrp@users.sf.net