2010-11-19 13 views
12

ImageMagick crea algunos PNG bastante grandes. GraphicsMagick es mucho mejor, pero aún estoy buscando las mejores opciones para usar con convert para obtener el png más pequeño del tamaño del archivo.¿Qué opciones para convertir (ImageMagick o GraphicsMagick) producen el archivo PNG más pequeño (tamaño de archivo)?

Tengo aquí un large png with a small filesize, y pasando esto a través de la conversión IM no he podido alcanzar ese tamaño de archivo, y mucho menos hacerlo más pequeño. Con GM convert puedo obtenerlo un poco más pequeño pero estoy buscando mejoras, genéricamente para cualquier imagen Me encuentro.

gm convert -quality 95 a_png.png gm.png 
convert -quality 95 -depth 8 a_png.png im.png 
gm identify * 

a_png.png PNG 2560x2048+0+0 PseudoClass 256c 8-bit 60.1K 0.000u 0:01 
gm.png[1] PNG 2560x2048+0+0 PseudoClass 256c 8-bit 60.0K 0.000u 0:01 
im.png[2] PNG 2560x2048+0+0 DirectClass 8-bit 130.2K 0.000u 0:01 

¿Qué opciones para convertir producir el más pequeño tamaño de archivo PNG?

(Sí, estoy familiarizado con OptiPNG, PNGOUT y Pngcrush. Pero estoy detrás de algo que estará disponible sin lugar a dudas en cada cuadro de * nix da la casualidad que en.)

+1

Los que lo convierte en un PNG8 1x1. –

+0

Cuando puede ejecutar scripts en una máquina, también puede poner archivos en ella, ¿no? ¿Qué le parece enlazar pngcrush estáticamente y ponerlo en el cuadro * nix que está usando? – thejh

+0

@thejh, sí, podría hacerlo. Sin embargo, esto a menudo no es aceptable en entornos de producción. Además, IM/GM juntos son probablemente los paquetes de gráficos más utilizados. Así que estoy seguro de que solo se trata de encontrar las opciones correctas ... –

Respuesta

11

parece que y yo estamos buscando la misma respuesta. Lamentablemente, no parece haber mucha gente con un buen conocimiento de GraphicsMagick. Esto es lo que he aprendido hasta ahora,

El operador de calidad no funciona correctamente para ninguna imagen que no sea JPEG. Para mí, el tamaño del archivo aumentó cuando se lo usó en PNG y GIF.

he hecho esto a mis archivos PNG y GIF para reducir su tamaño:

gm convert myImage.png +dither -depth 8 -colors 50 myImage.png 
  • +dither hacen paradas difuminado de la imagen cuando se reducen los colores. (Esto reduce el tamaño del archivo)

  • -depth 8 es probablemente innecesario, ya que la mayoría de los archivos PNG ya están profundidad 8.

  • -colors 50 reduce el número de colores de la imagen a 50, esta es la única manera de reducir realmente el tamaño de una imagen almacenada en un formato sin pérdida como PNG o GIF.

Obviamente la mejor relación calidad de imagen/tamaño que usted simplemente no puede reducir la profundidad de la imagen o el número de colores sin conocer la profundidad actual y el número de colores. Para determinar esta información, estoy haciendo lo siguiente

gm identify -format "file_size:%b,unique_colors:%k,bit_depth:%q" myImage.png 

Para mi imagen; esto devuelve

file_size:100.7k,unique_colors:13455,bit_depth:8 

El problema es cuando GraphicsMagick reduce los colores que siempre se reduce a al menos 255, por lo que no se puede establecer el número de colores a 300 por ejemplo. También parece haber un problema con el canal alfa para archivos PNG; Si la imagen tiene transparencia, la reducción de colores reemplaza estos colores con transparente; con imagemagick no hace esto.

+0

También para JEPGS, puede agregar + perfiles "*" para eliminar cualquier perfil de la imagen, esto reducirá ligeramente el tamaño de la imagen. Creo que debido a que ambos estamos tratando de hacer lo mismo, podemos compartir el conocimiento sobre este tema. Si encuentra información adicional o tiene alguna pregunta, envíeme un mensaje. Gracias. – toc777

+0

Gracias por la publicación informativa toc777. Una corrección: la calidad definitivamente hace una diferencia en el tamaño de archivo de los PNG, pero realiza una operación diferente a la de jpeg, lee la especificación para obtener detalles, he encontrado -quality 95 para hacer el png más pequeño. Aquí hay un trazador de líneas de bash one para demostrar: para i en {1..100}; do gm convert big_yet_small.png -quality $ i $ i.png; hecho –

+0

También hemos encontrado el error de transparencia de GM. Parece activarse en imágenes más grandes, dimensionar primero con IM y luego procesar con GM es una solución alternativa. Necesito presentar un informe de error ... –

6

Acabo de encontrar esta pregunta nuevamente, así que actualizaré, GraphicsMagick e ImageMagick tienen un problema grave. No pueden escribir imágenes PNG utilizando un fragmento tRNS, lo que significa que si intenta leer en una imagen que tiene un fragmento tRNS y luego lo escribe, la imagen será mucho más grande. GM no es la mejor herramienta para comprimir imágenes. Necesita usar una herramienta separada como OptiPNG para comprimir PNG nuevamente después de usar Image/GraphicsMagick.Obtengo hasta un 60% de archivos más pequeños cuando utilizo OptiPNG después de ejecutar GraphicsMagick en una imagen.

También me preguntaba si ha encontrado un problema con respecto a las imágenes RGBA y profundidad de bits. Para algunas imágenes, recibo una excepción de "profundidad de bits no válida". No puedo ver ninguna razón por qué.

2

No he encontrado una manera de hacerlo en la línea de comandos, pero encontré este sitio web gratuito (http://tinypng.org/) que hace un excelente trabajo, mi imagen de prueba obtuvo una reducción del 71%, el tamaño final fue solo del 29% del original. Parece que puedes darle 20 imágenes a la vez. Estoy investigando cómo lo hacen.

http://tinypng.org/

+8

[pngquant] (http://pngquant.org) es la herramienta de línea de comandos detrás de tinypng. – Kornel

+1

No diría que es gratis ... – tomericco

+1

Probablemente fue gratis en 2013 – 23inhouse

Cuestiones relacionadas