Wednesday, 25 October 2017

Optipng Binary Options


No estoy seguro si esto ayudará. Pero recientemente he tenido errores similares con optipng y jpegtran cuando se utiliza el generador angular en yo. (Nota: Yo no estaba probando en OSX en el momento - sino más bien windows. Pero creo que el problema es el mismo basado en mi recuerdo de los errores.) El problema era que he actualizado a la última yo y algunas cosas residuales se mantuvo en mi Npm cache. Las siguientes cosas fijas: Después de hacer esto, he probado yo angular en un directorio limpio, y el andamio fue creado sin errores. Una guía para la optimización de PNG 1. Antecedentes 1.1 El formato de archivo PNG El Portable Network Graphics (PNG) es un formato Para almacenar gráficos de trama comprimidos. El motor de compresión se basa en el método Deflate RFC1951, diseñado por PKWare y utilizado originalmente en PKZIP. El formato PNG está definido por la especificación PNG. Esta especificación fue desarrollada por un grupo ad-hoc llamado PNG Development Group. Y es tanto una Norma Internacional (publicada bajo el nombre formal ISO / IEC 15948) como una Recomendación del W3C. PNG fue pensado inicialmente como un reemplazo superior, libre de patentes de GIF. El resultado final es un formato de imagen moderno, extensible y fiable, capaz de manejar un número impresionante de tipos de imágenes (desde imágenes en blanco y negro de 1 bit hasta imágenes RGB de 48 bits con un canal alfa de 16 bits) Y orientado por un motor de compresión sin pérdidas significativamente más fuerte (normalmente 5-25 mejor que GIF). A diferencia de otros esquemas de compresión sin pérdida, la compresión PNG no depende únicamente de las estadísticas de la entrada, pero puede variar dentro de amplios límites, dependiendo de la implementación de los compresores. Un buen codificador PNG debe ser capaz de tomar decisiones informadas sobre los factores que afectan el tamaño de la salida. El propósito de este artículo es proporcionar información sobre estos factores y dar consejos sobre cómo implementar codificadores PNG eficientes. 1.2 La compresión PNG La compresión PNG funciona de forma pipeline. En la primera etapa, los píxeles de imagen se pasan a través de una transformación aritmética sin pérdidas denominada filtrado delta. O simplemente filtrado. Y se envía como una secuencia de bytes (filtrada). El filtrado no comprime ni reduce el tamaño de los datos, pero hace que los datos sean más comprimibles. En la segunda etapa, la secuencia de bytes filtrados se pasa a través del algoritmo de Ziv-Lempel (LZ77), produciendo códigos LZ77 que son comprimidos por el algoritmo de Huffman en la tercera y última etapa. La combinación de las dos últimas etapas se conoce como la compresión Deflate. Un algoritmo ampliamente utilizado, libre de patentes para la compresión universal de datos sin pérdidas. El tamaño máximo de la ventana deslizante LZ77 en Deflate es de 32768 bytes y los coincidencias LZ77 pueden tener entre 3 y 258 bytes de longitud. Una descripción completa de la compresión PNG está fuera del alcance de esta guía. La especificación PNG describe el formato completamente y proporciona una lista completa de referencias a las tecnologías subyacentes. 2. Factores que afectan al tamaño del archivo PNG Como cualquier otro esquema de compresión, la compresión PNG depende de las estadísticas de los datos de entrada. Además, depende de los siguientes parámetros específicos de PNG: El tipo de imagen PNG Los filtros delta PNG La estrategia de búsqueda de coincidencias LZ77 El tamaño de los buffers Huffman dentro del codificador Deflate Dependiendo de cómo estos parámetros son elegidos por la implementación, la compresión PNG Puede variar dentro de amplios límites. El proceso de selección de la mejor configuración es computacionalmente inviable, pero se dispone de heurísticas para seleccionar una configuración satisfactoria. El problema de mejorar estas heurísticas constituye un tema interesante para la investigación. 2.1 El tipo de imagen PNG El tipo de imagen PNG se define en el encabezado de la imagen de la IHDR. La imagen tiene una profundidad de bits determinada, hasta 16 bits por muestra, y un cierto tipo de color, desde la escala de grises a RGBAlpha. Si dos archivos PNG de diferentes tipos representan exactamente la misma imagen, cada archivo puede considerarse como una transformación sin pérdidas del otro. Una transformación sin pérdidas puede reducir la corriente no comprimida, y tal transformación se denomina reducción de imagen. En la mayoría de los casos, las reducciones de imagen son capaces de reducir la corriente comprimida (que es, de hecho, nuestro interés), como un efecto indirecto de reducir el tamaño de la entrada de los compresores. Las posibles reducciones de imagen son: Reducción de profundidad de bits La profundidad de bits se puede reducir a un valor mínimo aceptable para todas las muestras. Por ejemplo, si todos los valores de muestra en una imagen de 16 bits tienen el formato (2561) n. (Por ejemplo, 0000, 2323, FFFF), entonces la profundidad de bits puede reducirse a 8, y los nuevos valores de muestra se convertirán en n. (Por ejemplo 00, 23, FF). Reducción de color - Si una imagen RGB tiene 256 colores distintos o menos, puede volver a codificarse como una imagen de paleta. - Si una imagen RGB o Paleta sólo tiene píxeles grises, puede volver a codificarse como Escala de grises. Una reducción de tipo de color también puede permitir una reducción de profundidad de bits. Reducción de la paleta de colores Si la paleta de colores contiene entradas redundantes (es decir, entradas duplicadas que indican el mismo valor RGB) o entradas estériles (es decir, entradas que no tienen un corresponsal en los datos de píxel sin procesar), estas entradas pueden eliminarse. Una reducción de paleta de colores también puede permitir una reducción de profundidad de bits. Reducción del canal alfa Si todos los píxeles de una imagen GrayscaleAlpha o RGBAlpha son totalmente opacos (es decir, todos los componentes alfa son iguales a 2 bitdepth -1), o si la información de transparencia puede almacenarse enteramente en un fragmento tRNS (mucho más barato), el alpha Canal puede ser despojado. Hay, sin embargo, algunos casos en los que algunas reducciones de tipo de imagen no conducen necesariamente a la reducción de la corriente comprimida. El sitio de PNG-Tech contiene análisis experimentales de estas posibilidades, por ejemplo, ver el artículo 8 bits por píxel en imágenes paletadas. El entrelazado, útil para un renderizado más rápido y progresivo, es otro componente del tipo de imagen PNG que afecta a la compresión. En un flujo entrelazado, las muestras correspondientes a los píxeles vecinos se almacenan lejos, por lo tanto los datos en él están menos correlacionados y menos compresibles. A diferencia de JPEG, donde el entrelazado puede mejorar ligeramente la compresión, el entrelazado PNG degrada significativamente la compresión. 2.2 Filtros delta PNG El rol de filtrado puede ilustrarse en el siguiente ejemplo. Supongamos la secuencia 2, 3, 4, 5, 6, 7, 8, 9. Aunque tiene mucha redundancia, la secuencia no es compresible por un compresor Ziv-Lempel ni por un compresor Huffman. Sin embargo, si se hace una transformación simple y reversible, reemplazando cada valor por la diferencia numérica entre éste y el valor a su izquierda, la secuencia pasa a ser 2, 1, 1, 1, 1, 1, 1, 1, que es altamente compresible . El formato PNG emplea cinco tipos de filtros: Ninguno. Izquierda . Arriba . Promedio . Y Paeth. El primer filtro deja los datos originales intactos, y los otros cuatro restan de cada píxel un valor que involucra a los píxeles vecinos de la izquierda, arriba y / o superior izquierda. Un cierto filtro se asigna a cada fila, y se aplica a todos los píxeles de esa fila. Por lo tanto, una imagen puede ser delta-filtrada en un gran número de configuraciones posibles (altura 5), ​​y cada configuración conduce a una salida comprimida diferente. Dos configuraciones de filtro diferentes pueden hacer una diferencia en el tamaño de archivo comprimido por un par de factores, por lo que una cuidadosa selección de filtros es de suma importancia. Es posible aplicar un solo filtro a todas las filas, o aplicar diferentes filtros a diferentes filas. En el primer caso, el proceso de filtrado es fijo en el segundo, es adaptativo. Mientras que una búsqueda exhaustiva es inviable, la especificación PNG sugiere una estrategia de filtrado heurístico: Si el tipo de imagen es Paleta, o la profundidad de bits es menor de 8, entonces no filtrar la imagen (es decir, usar filtro fijo con el filtro Ninguno). (El otro caso) Si el tipo de imagen es Escala de grises o RGB (con o sin Alpha) y la profundidad de bits no es menor que 8, utilice el filtrado adaptativo de la siguiente manera: independientemente para cada fila. Aplicar los cinco filtros y seleccionar el filtro que produce la suma más pequeña de valores absolutos por fila. Los casos en los que las heurísticas anteriores son inferiores a lo óptimo se muestran en el sitio de PNG-Tech, por ejemplo, vea Brute-fuerza vs. filtrado heurístico. 2.3 La estrategia de búsqueda de concordancias de LZ77 El algoritmo de Ziv-Lempel funciona bajo la suposición de que secuencias contiguas aparecen repetidamente en el flujo de entrada. Si la secuencia a codificar coincide con una o más secuencias ya presentes en la ventana de historial deslizante, el codificador envía un par LZ77 (longitud de distancia) que apunta a la coincidencia más cercana. En la mayoría de las encarnaciones LZ77, incluyendo Deflate, los códigos de distancia más pequeños se codifican de forma más concisa. En Deflate, en particular, los símbolos regulares (no coincidentes) y las longitudes de coincidencia, se envían al mismo codificador Huffman, mientras que las distancias de coincidencia se envían a un codificador Huffman separado. Si las coincidencias de LZ77 se encuentran entre los límites aceptados (es decir, no son más cortos que 3 y no más de 258), una estrategia codiciosa los aceptará como reemplazo de los símbolos a los que corresponden. La estrategia codiciosa es preferible al comprimir archivos de texto o muchos tipos de archivos binarios, pero puede ser subóptima al comprimir datos filtrados, como las cadenas de bytes que provienen de un filtro PNG. Los datos filtrados consisten principalmente en valores pequeños con una distribución pseudoaleatoria. Por lo tanto, en ciertas situaciones, puede ser deseable favorecer la codificación de símbolos individuales, incluso si existen coincidencias que pueden sustituir a estos símbolos. La librería de referencia de zlib es una implementación de referencia de Deflate, que además es utilizada por la PNG Reference Library. De forma predeterminada, zlib selecciona la estrategia codiciosa, pero el usuario puede especificar su preferencia personalizada a través del parámetro de estrategia. Este parámetro puede tomar uno de los siguientes valores: - ZDEFAULTSTRATEGY 0. la estrategia de búsqueda codiciosa predeterminada. - ZFILTERED 1. Una estrategia en la que los partidos son aceptados sólo si su longitud es 6 o más grande. - ZHUFFMANONLY 2. Una estrategia rápida en la que el algoritmo de Ziv-Lempel es totalmente ignorado, y todos los símbolos de la entrada son codificados directamente por el codificador de Huffman. - ZRLE 3 (aparecido en la serie zlib-1.2.x), una estrategia rápida en la que el algoritmo LZ77 se reduce esencialmente al algoritmo Run-Length Encoding. Por ejemplo, la secuencia de 10 símbolos aaaaaaaaaa puede codificarse como LZ77 (distancia 1, longitud 9) eliminando la distancia 1 de la imagen, esta codificación puede Puede considerarse como una codificación de longitud de ejecución peculiar (que difiere del RLE clásico usando la longitud 9 en lugar de la cuenta 10). El parámetro de estrategia sólo afecta a la relación de compresión. No afecta a la corrección de la salida comprimida, incluso si se establece en un valor inadecuado. Se observó experimentalmente que la búsqueda LZ77 ocasionalmente es capaz de producir PNG más pequeños si es menos exhaustiva. La razón detrás de este acto reside en la misma categoría de búsquedas estratégicas que se analizan aquí. Desafortunadamente, no existe un método conocido de anticipar qué nivel de búsqueda (desde el más rápido y el menos exhaustivo hasta el más lento y el más exhaustivo) es mejor, aparte de suponer que el más exhaustivo es mejor en la mayoría de los casos. Desafortunadamente, incluso una estrategia filtrada no siempre produce mejores resultados que una estrategia codiciosa en la entrada filtrada, y el único método conocido para obtener la mejor combinación es por múltiples ensayos. Experimentos y mediciones pueden encontrarse de nuevo en el sitio de PNG-Tech, por ejemplo, ver la propuesta original de la estrategia ZRLE. 2.4 El tamaño de los tampones de Huffman Como se mencionó anteriormente, el codificador de entropía dentro del método Deflate es el algoritmo estático de Huffman. La salida de LZ77 se alimenta en un búfer que se enrojece ocasionalmente enviando un árbol de Huffman estático seguido de todos los códigos de Huffman, a la salida de Deflate. Después de esto, tanto el búfer como el árbol Huffman se restablecen, esperando a que los códigos LZ77 subsiguientes vengan y llenen el búfer. La especificación Deflate se refiere a los códigos Huffman dinámicos. Sin embargo, esto es un nombre incorrecto, en el que el término dinámica se utiliza en contraste con los códigos fijos de Huffman. Los códigos fijos de Huffman se construyen simplemente de acuerdo con un árbol Huffman predefinido, sin tener en cuenta las frecuencias de símbolos reales. Los códigos Huffman dinámicos referidos por la especificación de Deflate no son construidos por el algoritmo Huffman dinámico, tal como se define, por ejemplo, por Faller, Gallager y Knuth (el algoritmo FGK), o por Vitter (el algoritmo V). El árbol Huffman predefinido se introdujo en PKZIP como una alternativa de compresión rápida, pero produce pobres resultados incluso en el texto, y es casi inútil en la compresión PNG. Sin embargo, un flujo PNG que contiene códigos construidos por el árbol Huffman fijo (predefinido), es un flujo válido, y un lector PNG compatible debe decodificar correctamente este flujo. Es deseable establecer los límites del tampón de modo que las secuencias que se ajusten al mismo modelo de probabilidad se ajusten en el mismo tampón de Huffman. Existen métodos para abordar estos límites, pero no se usan en la implementación de Deflate. En su lugar, los búferes se enjuagan cuando se alcanza un límite (típicamente, 16k códigos LZ77). Este es, sin embargo, un enfoque rápido, y los resultados son satisfactorios. El tamaño de los búferes Huffman está determinado indirectamente por el nivel de memoria (uso) de los codificadores. Por esta razón, ciertos niveles de memoria pueden ser buenos para ciertos tipos de imágenes. 3. Programas de optimización de PNG (lossless) La multitud de programas de codificación PNG se listan en libpng. org/pub/png/pngapps. html. Su rendimiento varía tanto como el rango de relaciones de compresión posibles, los buenos codificadores son al menos la aplicación de la heurística de filtrado, descrita brevemente en la Especificación PNG, e ilustrada anteriormente. Algunos programas obtienen una compresión extra al descartar algunos de los datos de las imágenes de entrada (por lo que estos programas tienen pérdidas) Esta sección contiene la pequeña lista de programas de optimización PNG que muestran una preocupación particular por obtener un tamaño de archivo lo más pequeño posible. Trabajan realizando ensayos de compresión repetidos, aplicando varios conjuntos de parámetros y seleccionando el conjunto de parámetros que produce la salida comprimida más pequeña. Pngrewrite de Jason Summers, disponible en pobox / jason1 / pngrewrite. Es un programa de código abierto que realiza reducciones de imágenes sin pérdidas. Funciona mejor en conjunción con pngcrush (ver más abajo) el usuario debe ejecutar pngcrush después de pngrewrite. Pngcrush por Glenn Randers-Pehrson, disponible en pmt. sourceforge. net/pngcrush. Es un programa de código abierto que itera sobre los filtros PNG y los parámetros zlib (Deflate), comprime la imagen repetidamente usando cada configuración de parámetro y elige la configuración que produce la salida comprimida más pequeña (IDAT). En la opción de los usuarios, el programa puede explorar pocas (por debajo de 10) o muchas (una trayectoria de fuerza bruta sobre más de 100) configuraciones. El método de selección de los parámetros para pocos ensayos es particularmente eficaz, y el uso de un recorrido de fuerza bruta generalmente no se recomienda. Además, pngcrush ofrece una multitud de características adicionales, como la recuperación de archivos PNG erróneos (por ejemplo, archivos que contienen malos CRC) y la edición a nivel de trozos de metadatos PNG. OptiPNG de Cosmin Trua, disponible en cs. toronto. edu/pngtech/optipng. Es un nuevo programa de código abierto, inspirado en pngcrush. Pero diseñado para ser más flexible y correr más rápido. A diferencia de pngcrush. OptiPNG realiza los ensayos completamente en memoria y escribe solamente el archivo de salida final en el disco. Además, ofrece múltiples presets de optimización para el usuario, que puede elegir entre una gama de opciones de muy pocos ensayos a muchos ensayos (en contraste con la más gruesa opción inteligente versus bruta ofrecida por pngcrush). Es importante mencionar que la proporción de compresión lograda es cada vez menos probable que mejore cuando se usan presets de nivel superior (trigerring más ensayos). Incluso si el programa es capaz de buscar automáticamente más de 200 configuraciones (y los usuarios avanzados tienen acceso a más de 1000 configuraciones), un preset que selecciona alrededor de 10 ensayos debe ser satisfactorio para la mayoría de los usuarios. Además, un preset que selecciona entre 30-40 ensayos debe ser satisfactorio para todos los usuarios, ya que es muy, muy poco probable que sea golpeado significativamente por cualquier búsqueda más amplia. AdvanceCOMP by Andrea Mazzoleni es un conjunto de herramientas para la optimización de archivos ZIP / GZIP, PNG y MNG, basados ​​en la base de datos En el potente motor de deflación 7-Zip. El nombre de la herramienta de optimización PNG es AdvPNG. Al momento de escribir este artículo, AdvPNG no realiza reducciones de imagen, por lo que puede ser necesario el uso de pngrewrite o OptiPNG antes de la optimización. Sin embargo, dado los efectos de la deflación 7-Zip, AdvanceCOMP es un contendiente poderoso. El conjunto de herramientas AdvanceCOMP es una parte del proyecto AdvanceMAME, disponible en advancemame. sourceforge. net. PNGOut de Ken Silverman, disponible en advsys. net/ken/utils. htm. Es un programa compilado libremente disponible (sin código fuente), que se ejecuta en Windows y Linux. Según nuestras pruebas, la relación de compresión alcanzada por PNGOut es comparable a la de AdvPNG. Desafortunadamente, debido a la falta de información, no podemos decir mucho sobre esta herramienta. 4. Una nota adicional sobre losslessness Lo que es lossless optimización PNG, después de todo Esta es una pregunta sencilla, cuya respuesta es intuitiva, pero no tan sencillo. La falta de pérdida en el sentido más estricto, donde no se pierde información, sólo se puede lograr dejando intacto el fichero original (cualquier fichero), o transformándolo (comprimiéndolo, cifrándolo) de tal manera que se produzca una transformación inversa Que la recupera completamente, poco a poco. En el caso de imágenes PNG, esta condición de pérdida de pérdida estricta tiene poca relevancia para el usuario de gráficos ocasionales, y es, por lo tanto, demasiado fuerte. Hay casos en los que se requiere una estricta pérdida de datos, por ejemplo, al manejar archivos PNG certificados cuya integridad está garantizada por una suma de comprobación externa como MD5 o SHA. O por una firma digital como dSIG. Sin embargo, la mayor parte del tiempo es deseable relajar la noción de pérdida de PNG, hasta el punto de no perder ninguna información que pertenezca a la imagen renderizada y al valor semántico de los metadatos que acompaña a la imagen. Esto permite al usuario concentrarse en lo que es realmente importante cuando se trata de preservar el contenido de una imagen PNG, y permite el concepto de herramientas de optimización PNG. Una transformación sin pérdidas de un archivo de imagen PNG es una transformación que preserva completamente los triples RGB renderizados (los triples RGB que vienen directamente, o desde un índice de paleta, o desde una expansión RGB gris), la transparencia renderizada (las muestras alfa que Vienen directamente o de un fragmento tRNS, o la opacidad implícita de 100 debido a la falta de cualquier información de transparencia explícita), el orden de representación (secuencial o entrelazado) y la semántica contenida por los fragmentos auxiliares. Esta definición permite la ejecución de las operaciones de reducción de imagen anteriormente mencionadas, y la recompresión de IDAT. También permite la alteración o la eliminación de otras piezas de información que son técnicamente válidas, pero no influyen en ninguna presentación de los píxeles de imagen: La información que pertenece a Deflate arroyos, ya sea dentro de IDAT. O en otros trozos comprimidos como zTXt. ITXt o iCCP p. El tamaño de la ventana LZ77, el tipo y el tamaño de los bloques Deflate, etc. (Lo único que importa es que la secuencia de bytes descomprimidos debe seguir siendo la misma.) El orden de las entradas de la paleta dentro de un trozo PLTE. (Al cambiar este orden, la información que depende de él, como los píxeles codificados en la paleta o la información tRNS, debe actualizarse en consecuencia.) Las triples RGB que no corresponden a ningún píxel de la imagen real, sino que se almacenan en un TRNS trozo. Entradas tRNS completamente opacas en una imagen de paleta. Corrección gamma (GAMA) o información de bit significativo (sBIT) dentro de una imagen que consiste exclusivamente en muestras cuya intensidad sea mínima (0) o máxima (2 bitdepth -1). El hecho de que un comentario textual se almacena descomprimido en un fragmento tEXt o comprimido en un fragmento zTXt o sin traducción en un fragmento iTXt. Etcetera. Si alguna de la información descartable es importante en una aplicación en particular y la optimización PNG sin pérdidas sigue siendo deseable, se recomienda almacenar esta información en fragmentos auxiliares, en lugar de cortarla dentro de trozos críticos. Por ejemplo, si son necesarias las entradas de paleta estériles (por ejemplo, para etapas de edición posterior), se recomienda almacenarlas dentro de un trozo de paleta sugerida (sPLT), en lugar de mantenerlas dentro de PLTE. 5. Bibliografía selectiva Además de las especificaciones discutidas, las referencias a continuación proporcionan la información esencial necesaria para comprender el contenido de este artículo. Thomas Boutell, Glenn Randers-Pehrson y col. Especificación Portátil de Gráficos de Red (PNG), Segunda Edición. ISO / CEI 15948: 2003 (S) Recomendación del W3C 10 de noviembre de 2003. David A. Huffman. Método para la construcción de códigos de redundancia mínima. En Actas del Instituto de Ingenieros de Radio. Vol. 40, no. 9, pp. 1098-1101, septiembre de 1952. Jacob Ziv y Abraham Lempel. Un algoritmo universal para la compresión de datos. IEEE Transacciones sobre Teoría de la Información. Vol. IT-23, no. 337-343, mayo de 1977. Debido a un accidente histórico, el famoso algoritmo es mejor conocido como el algoritmo Lempel-Ziv (LZ), aunque el algoritmo Ziv-Lempel es un nombre más legítimo. Greg Roelofs. PNG: La guía definitiva. OReilly and Associates, 1999. Copia de copyright 2003-2008 Cosmin Trua. Permiso para distribuir libremente. Apareció: 7 de abril de 2003. Última actualización: 10 de mayo de 2008. La utilidad de línea de comandos optipng como un flujo legible / grabable. Esto es útil para situaciones en las que donapost desea preocuparse por escribir la entrada al disco y leer la salida después. Si donapost tiene un binario optipng en su PATH, node-optipng intentará utilizar uno de los binarios proporcionados por el paquete node-optipng-bin. El constructor opcionalmente toma una matriz de opciones de línea de comandos para el binario optipng: OptiPng como un servicio web: Asegúrese de tener node. js y npm instalados, luego ejecute: Licencia BSD de 3 cláusulas - consulte el archivo LICENSE para más detalles. Nunca ha sido más fácil administrar equipos de desarrolladores con diferentes permisos y proyectos múltiples. Aprenda más sobre Paquetes Privados y Organizacioneshellip Lista de Colaboradores Estadísticas Pruebe Conozca las palabras clave Dependencias (4) Necesita Ayuda Acerca de npm Legal Stuff

No comments:

Post a Comment