convert image-processing png imagemagick jpeg gif

image processing - convert - ¿Por qué los archivos ''.png'' producidos por ImageMagick son mucho más grandes que los archivos ''.jpg'' y ''.gif''?



imagemagick ubuntu (6)

Esta pregunta ya tiene una respuesta aquí:

Estoy usando ImageMagick para convertir algunos archivos de un formato a otro. Siempre tuve la impresión de que los archivos .png debían ser tan grandes / pequeños como .jpg si no más pequeños, y definitivamente más pequeños que .gif.

Sin embargo cuando corro

convert photo.jpg photo.png

Los archivos que obtengo son aproximadamente 6 veces más grandes que el jpg original.
Jpg original es una foto normal de unos 300x500 px, 52 kb. ¿La salida es un png adecuado de las mismas dimensiones, pero el tamaño es de aproximadamente 307 kb?

¿Alguien sabe qué es lo que está pasando? ¿Estoy haciendo algo mal?

PD:

Probé tanto en Debian como en Windows con los mismos resultados.

PPS:

También cuando agrego la opción de redimensionamiento a esto y lo redimensiono a 10000 x 10000. Convertir y redimensionar a jpg toma unos segundos, pero funciona, si hago lo mismo con png, me jsut strt quedando sin memoria por completo

PPPS: para las personas que siguen marcando esta pregunta como duplicado de PNG frente a GIF frente a JPEG frente a SVG: ¿Cuándo es mejor usarlo? . Por favor lea cuidadosamente y entienda la pregunta. No es un duplicado, ya que esta pregunta se refiere a los archivos producidos mediante programación con una aplicación específica (imagen mágica). La pregunta que marca como duplicado es preguntar qué formato de imagen es mejor usar en la web. Dos preguntas diferentes.


Depende del tipo de imagen. La compresión con pérdida de JPEG funciona muy bien en imágenes con muchos gradientes de color (es decir, fotos).

Pruébelo en una imagen que tenga áreas con el mismo color separadas por bordes afilados (las capturas de pantalla son buenas, a menos que muestren un fondo de escritorio de foto, y los elegantes bordes de las ventanas y la barra de tareas de Vista y Windows 7 también tienden a estropear esto). JPEG es malo en ese tipo de cosas, y probablemente encontrarás PNG para comprimir mejor (probablemente mejor que GIF también).


El formato PNG puede proporcionar imágenes de 24 bits por píxel u 8 bits por píxel. JPG es un formato de 24 bits, pero utiliza la compresión con pérdida para reducir significativamente el tamaño del archivo. PNG y GIF usan compresión sin pérdida, pero GIF solo funciona con 8 bits, por lo que requiere que la imagen tenga 256 colores o menos, lo que a menudo resulta en una imagen más granulada.

Pruebe las opciones de -colors y de -dither en ImageMagick para reducir la cantidad de bits en su salida PNG. En ese punto debería ser comparable al tamaño del archivo GIF. Si necesita reducirlo aún más, hay utilidades para optimizar el PNG.


El formato de archivo .jpeg es un formato con pérdida, desecha la información. Lo que hace para una buena relación de compresión. El formato de archivo .gif no tiene pérdidas, pero pierde otra información, solo admite 256 colores. El formato de archivo .png no tiene pérdidas y conserva la gama de colores.


En respuesta a: ¿Alguien sabe lo que está pasando el hack? ¿Estoy haciendo algo mal?

Sí, estudio esto, no estás haciendo nada mal, has producido PNG RGB de 8 bits / color Lo resuelvo con reducir o comprimo png con pngnq ( http://pngnq.sourceforge.net/ ) que produce 8 bits / color colormap PNG.

Pngnq me parece el proyecto más mejorado, ya que es una bifurcación de otros como pngquant, etc., y normalmente está en la corriente principal de las distribuciones de Linux, así que simplemente hago esto:

convert photo.jpg png:- | pngnq -s 1 > photo.png

Para el último upvoter (2016): pngnq ha quedado en desuso a favor de pngquant ( https://github.com/pornel/pngquant )


JPG es un algoritmo de compresión con pérdida mientras que PNG no tiene pérdida .

Solo este hecho hará (en general) las imágenes JPG más pequeñas que las PNG. Puede ajustar las relaciones de compresión para cada formato, por lo que también podría ser que no esté comprimiendo sus archivos PNG tanto como sus archivos JPG.

Para una imagen fotográfica, guardar como JPG generalmente producirá un archivo más pequeño que PNG ya que hay más ruido o aleatoriedad en la imagen para que funcione la compresión. Las imágenes creadas por herramientas de arte gráfico tenderán a tener bordes más duros y áreas de color sólido que se comprimirán mejor en PNG.

Si tiene texto en su imagen, entonces PNG producirá una imagen de mejor calidad, ya que los bordes más duros de los caracteres no se difuminarán como si se usara JPG.

El GIF es más pequeño porque se basa en una paleta de colores (de 256 colores) en lugar de los valores RGB separados para cada píxel (o grupo de píxeles) en JPG y PNG.


La clave a tener en cuenta aquí es que cada formato de archivo de imagen es el mejor para propósitos específicos.

JPEG significa "Joint Photographic Experts Group" ("Grupo de expertos fotográficos conjuntos"). Eso debería decirle que el formato de archivo .JPG está optimizado para fotografías . No funciona tan bien para líneas de arte, logotipos, degradados o fondos en mosaico / estampados, etc. Los artefactos DCT (Transformación de coseno discreto) de .JPG (los artefactos “en bloque” que todos conocemos y detestamos) son mucho más notables con el arte lineal y los logotipos que con las fotos.

PNG ha reemplazado a GIF por todo aquello para lo que GIF fue bueno, excepto uno, y solo porque no ha surgido un estándar claro: las animaciones. Los .GIFs animados son bien conocidos en la Web. Hay dos estándares en competencia para .PNGs animados: APNG y MNG.

APNG es compatible con la mayoría de los navegadores modernos, y también es totalmente compatible con versiones anteriores (la extensión del archivo es .PNG, no .APNG, y si algún programa puede mostrar .PNG pero no sabe que APNG se “alimenta” de un APNG, lo hará muestre una imagen de stand-in de la elección del desarrollador, o el primer fotograma de la animación si no se proporcionó dicho stand-in: en lo que respecta al programa anterior, es solo un .PNG de un solo fotograma ordinario con esa imagen en ella - el resto se ignora con seguridad). Gecko (FF, etc. ) y Presto (Opera) lo admiten de forma nativa, y Google Chrome (con Webkit) puede con un complemento.

MNG cuenta con el respaldo del equipo de desarrollo de formato PNG real, pero tiene su propio formato y no es compatible con versiones anteriores, pero es más potente y flexible. En este momento, solo los navegadores basados ​​en KHTML (Konquerer) lo admiten: ni Trident (IE), Gecko, Webkit (Chrome, Chromium, Safari), ni Presto.

PNG hace todo (excepto las animaciones a menos que se mejore con APNG) que GIF hace, y mejor. Si todo lo demás es igual, un .PNG será casi siempre más pequeño que un .GIF con la misma resolución y profundidad de bits. Como .GIF, .PNG puede admitir profundidades de color de hasta 8 bits por píxel en modo de color indexado (con paleta), pero a diferencia de .GIF (pero como .JPEG) también admite el modo de color directo a 24 bits por píxel.

En cualquier modo, puede agregar 8 bits de transparencia alfa, a diferencia de .GIF (que solo puede hacer transparencias de color indexadas [elegir un color de la paleta para que sea reemplazado con una transparencia del 100%, también conocida como invisibilidad] - .PNG puede hacer eso también ). La transparencia alfa produce resultados mucho mejores que la transparencia indexada, porque los píxeles pueden ser parcialmente transparentes, mientras que con la transparencia indexada (el único tipo disponible en .GIF) sus opciones son opacas o invisibles. Esto genera "halos" alrededor de objetos no rectangulares cuando se colocan contra colores de fondo distintos de los que el .GIF o el .PNG indexado se "enmarañaron" originalmente. También inhibe la posibilidad de realizar efectos como brillos, sombras y, por supuesto, objetos de colores transparentes (sin oscilaciones). La transparencia alfa puede hacer todas esas cosas con facilidad, contra casi cualquier fondo (los brillos serían en gran parte invisibles en un fondo blanco, y las sombras paralelas serían invisibles en negro, pero sabes a qué me refiero).

Sí, puede hacer transparencia alfa de 8 bits en un color indexado .PNG! ¿Y adivina qué? ¡Incluso Microsoft Internet Explorer 6 puede mostrarlos bien, completos con transparencia! ¡Es solo los .PNG de 32 bits (color RGB de 24 bits + alfa de 8 bits) que IE6 se ahogó y se muestra en gris!

El programa más conocido que puede exportar PNG8 (color indexado) con transparencia alfa es Adobe (anteriormente Macromedia) Fireworks. El Photoshop "Guardar para la Web y los dispositivos" (al menos a partir de CS3) no pudo hacer eso, a pesar de que básicamente eliminó la característica de Fireworks cuando Adobe compró Macromedia. Puede guardar PNG8, pero solo con transparencia de color indexado.

De todos modos, los PNG completos de 32 bits (o incluso de 24 bits) serán bastante grandes, aunque generalmente mucho más pequeños que el equivalente más cercano .BMP o .TGA o .TIFF sin comprimir o algo así (a menos que esté tratando de hacer una fotografía con Es para eso que es JPEG!). Por lo general, será algo más pequeño incluso que .RLE (.BMP comprimido sin pérdida) o .TIF comprimido sin pérdida, todo lo demás será igual.

A diferencia de la mayoría de estos otros formatos, PNG también es compatible con el color RGB de 48 bits, con 16 bits opcionales de transparencia alfa, para una calidad extremadamente alta (mucho más alta de lo que la mayoría de los monitores pueden mostrar). Estos se utilizan mejor como un formato de almacenamiento intermedio, para retener información de un escáner o cámara con profundidad de bit alta (modo RAW) o algo similar. Sus tamaños de archivo serían bastante grandes, a pesar de la compresión sin pérdida.

Una cosa que actualmente no puede hacer .PNG es manejar espacios de color no RGB como CMYK o L * a * b.

En breve:

  • Para fotografías, utilice .JPG.
  • Para arte lineal y logotipos de color limitado, use .PNG de color indexado (PNG8), con transparencia alfa si es necesario.
  • Para arte lineal y logotipos de color extenso ( p . Ej., Muchos rellenos de degradado, efectos de reflexión de tipo cromo metálico, etc. ), use .PNG de color directo (PNG24) con alfa si es necesario, si desea la mejor calidad o necesita transparencia ( y no le importa que no funcione en IE6 o utilice una de las diversas soluciones provisionales de IE6 para PNG transparentes, y no le importe el uso de ancho de banda y archivos más grandes. De lo contrario, use .JPG, pero tenga en cuenta que la calidad se degradará. Es posible que deba aumentar la calidad JPEG bastante alto, especialmente para logotipos u otros gráficos con "texto" en ellos, lo que reduciría el ahorro de tamaño de archivo.
  • Para las animaciones que no sean Flash / Silverlight / video / HTML5 Canvas, .GIF es la opción principal en este momento, pero prepárese para cambiar a APNG (no creo que MNG vaya a mejorarlo, a pesar del soporte más oficial de JPEG desarrolladores).