¿Cuál es la diferencia entre ImageMagick y GraphicsMagick?
-
21-08-2019 - |
Pregunta
Me he encontrado a mí mismo la evaluación de estas bibliotecas.Aparte de lo que los GraphicsMagick comparación dice, veo que ImageMagick todavía tengo las actualizaciones y parece que los dos son casi idénticos.
Sólo estoy tratando de realizar operaciones básicas de manipulación de imágenes en C++ (es decir,la carga de imágenes, filtros, pantalla);¿hay diferencias que debo tener en cuenta al elegir entre estas bibliotecas?
Solución
A partir de lo que he leído GraphicsMagick es más estable y es más rápido. Hice un par de pruebas no científicas y encontré gm ser dos veces tan rápido como im (haciendo un cambio de tamaño).
Otros consejos
He encontrado ImageMagick para ser increíblemente lento para procesar TIFF grupo 4 imágenes (en blanco y negro imágenes de los documentos), debido principalmente al hecho de que se convierte a partir de 1 bit por píxel a 8 y de nuevo para hacer cualquier manipulación de imágenes. El grupo GraphicsMagick revisó el apoyo formato TIFF con su versión 1.2, y es mucho más rápido en el procesamiento de este tipo de imágenes que el original era ImageMagick. La liberación estable actual GraphicsMagick está en 1.3.5.
Puedo usar ImageMagick cuando la velocidad no es un factor.Sin embargo en el lado del servidor, donde decenas de miles de imágenes que se procesan diariamente, GraphicsMagick es bastante mucho más rápido - en algunos casos hasta un 50% más rápido en los puntos de referencia!
Como con muchas cosas en la vida, diferentes personas tienen diferentes ideas sobre lo que es mejor.Si le preguntas a un fotógrafo de paisajes que vaga alrededor de la lluvia en Escocia montañas, que es la mejor cámara del mundo, él va a decir que un poquito de peso, sellado de la cámara.Pida a un fotógrafo de estudio, y él te dirá la más alta resolución de uno con la mejor velocidad de sincronización del flash.Y si le preguntas a un fotógrafo de deportes le voy a contar el uno con el más rápido enfoque automático y la velocidad de fotogramas más alta.Así es con ImageMagick y GraphicsMagick.
El haber respondido a cerca de 2.000 StackOverflow preguntas sobre ImageMagick en los últimos 5 años, hago las siguientes observaciones...
En términos de popularidad...
- ImageMagick preguntas sobre LO superan en número a GraphicsMagick preguntas por un factor de 12:1 (7,375 preguntas vs 611 en Mayo de 2019), y
- ImageMagick seguidores en TAN superan en número a GraphicsMagick seguidores a las 15:1 ((387 seguidores, frente al 25 de Mayo de 2019)
En términos de rendimiento...
Me alegra reconocer que GraphicsMagick puede ser más rápido para algunos, pero no todos los problemas.Sin embargo, si la velocidad es su consideración más importante, creo que se debe probablemente a utilizar cualquiera libvips
, o código paralelo en el día de hoy de la Cpu multi-core o muy SIMD-optimizado (o de la GPU optimizada) de las bibliotecas como OpenCV.
En términos de características y flexibilidad...
Hay uno muy claro ganador aquí - ImageMagick.Mi experiencia es que hay muchas características que faltan de GraphicsMagick que están presentes en ImageMagick y yo una lista de algunos de estos a continuación, sin ningún orden en particular.
Me libremente admitir que no estoy tan familiarizado con GraphicsMagick como estoy con ImageMagick, pero hice mi mejor esfuerzo para encontrar cualquier mención de las características de la más reciente GraphicsMagick código fuente.Así, para el Detector de bordes Canny, me encontré con el siguiente comando en la GM de código fuente:
find . -type f -exec grep -i Canny {} \;
y no encontró nada.
Detector de bordes Canny
Esto parece estar completamente ausente en GM.Ver -canny radiusxsigma{+lower-percent}{+upper-percent}
en IM.
Ver ejemplo aquí y la muestra del borde-detección de Lena imagen:
Parenthesised procesamiento sofisticado de re-secuenciación
Este es un asesino en función de ImageMagick que frecuentemente me extraña profundamente al tener que hacer uso de GM.IM puede cargar o crear o clonar toda una serie de imágenes y aplicar diferentes de procesamiento de forma selectiva a determinadas imágenes y de la re-secuencia, duplicar y re-orden muy sencilla y cómoda.Es difícil expresar la increíble flexibilidad que ofrece en una respuesta corta.
Imagina que quieres hacer algo bastante simple como cargar Una imagen y el desenfoque, la carga de la imagen B y hacerlo en escala de grises y, a continuación, coloque las imágenes lado a lado con la Imagen de la B a la izquierda.Que se parece a esto con ImageMagick:
magick imageA.png -blur x3 \( imageB.png -colorspace gray \) +swap +append result.png
Ni siquiera se puede empezar con la GM, que se quejan de los paréntesis.Si usted los quita, se quejan de intercambio de la imagen de la orden.Si quita que aplicará la conversión de escala de grises a imágenes de ambos ya que no entiende paréntesis y lugar imageA a la izquierda.
Consulte la siguiente secuenciación de comandos en IM:
-swap
-clone
-duplicate
-delete
-insert
-reverse
fx de BRICOLAJE de Procesamiento de Imagen Operador
IM tiene la -fx
el operador que le permite crear y experimentar con la increíblemente sofisticado procesamiento de la imagen.Usted puede tener la función evaluada para cada uno de los pixeles de una imagen.La función puede ser tan complicado como te gusta (guardar en un archivo si se desea) y el uso de todas las operaciones matemáticas, ternario de estilo if
las declaraciones, las referencias a los píxeles incluso en otras de las imágenes y su brillo o la saturación y así sucesivamente.
Aquí hay un par de ejemplos:
magick rose: -channel G -fx 'sin(pi*i/w)' -separate fx_sine_gradient.gif
magick -size 80x80 xc: -channel G -fx 'sin((i-w/2)*(j-h/2)/w)/2+.5' -separate fx_2d_gradient.gif
Una respuesta de StackOverflow que utiliza esta característica para un gran efecto en el procesamiento de la pantalla verde (chroma-llave) imágenes aquí.
De Fourier (dominio de la frecuencia), el Análisis
Parece ser que no hay mención de avance o de retroceso Análisis de Fourier en GM, ni el Alto Rango Dinámico de apoyo (ver más adelante) que normalmente se necesita para ello.Ver -fft
en IM.
Componente Conectado Análisis / Etiquetado/ Análisis Blob
Parece ser que no hay "Conectado Análisis De Componentes" en GM - también conocido como "etiquetado" y "Análisis Blob".Ver -connected-components connectivity
4 - y 8-conectados análisis blob.
Esta característica por sí sola ha proporcionado más de 60 respuestas - ver aquí.
Hough Línea De Detección De
Parece ser que no hay Hough Línea de Detección de GM.Ver -hough-lines widthxheight{+threshold}
en IM.
Vea la descripción de la característica aquí y siguiendo el ejemplo de detectado líneas:
Momentos y la Percepción de Hash (pHash)
Parece ser que no hay soporte para la imagen de los momentos de cálculo (centroides y órdenes superiores), ni la Percepción de Hash en GM.Ver -moments
en IM.
La morfología de la
Parece ser que no hay soporte para el procesamiento Morfológico en GM.En IM no es sofisticado soporte para:
- la dilatación
- la erosión
- morfológicas de apertura y cierre
- skeletonisation
- la distancia de la morfología
- el sombrero y la parte inferior del sombrero de morfología
- Golpeado y se Pierda en la morfología de fin de línea, línea de uniones, picos, crestas, Convexo, Cascos, etc
Ver todos los sofisticadas de procesamiento que se puede hacer con este gran tutorial.
Contraste Limitada de Adaptación del Histograma anterior - CLAHE
Parece ser que no hay apoyo para el Contraste Limitada de Adaptación del Histograma anterior en GM.Ver -clahe widthxheight{%}{+}number-bins{+}clip-limit{!}
en IM.
HDRI - High Dynamic Range Imaging
Parece ser que no hay apoyo de Alto Rango Dinámico de la Imagen, en GM - a sólo 8, 16 y 32 bits, los tipos enteros.
De convolución
ImageMagick es compatible con muchos tipos de convolución:
- Diferencia de Gaussianas Perro
- El laplaciano
- Sobel
- Brújula
- Prewitt
- Roberts
- Frei-Chen
Ninguno de estos son mencionados en el GM código fuente.
La magia Persistente Registro (MPR)
Esta es una valiosa característica que está presente en ImageMagick que permite escribir de procesamiento intermedio de resultados a nombre de trozos de memoria durante el procesamiento sin la sobrecarga de la escritura en el disco.Por ejemplo, se puede preparar una textura o patrón y, a continuación, en mosaico sobre una imagen, o preparar una máscara y, a continuación, modificar y aplicar más tarde en el mismo procesamiento sin ir a la disco.
He aquí un ejemplo:
magick tree.gif -flip -write mpr:tree +delete -size 64x64 tile:mpr:tree mpr_tile.gif
Amplio Espacio De Colores Apoyo
IM es compatible con los siguientes colourspaces no se encuentra en GM:
- CIELab
- HCL
- HSI
- LMS
- otros.
Soporte De Pango
IM apoya Pango Text Markup Language), que es similar a HTML y permite anotar las imágenes con el texto que cambia:
- de la fuente, el color, el tamaño, el peso, la cursiva
- subíndice, superíndice, la huelga-a través de
- justificación
en mitad de la frase y mucho, mucho más.No es un gran ejemplo aquí.
Shrink-sobre-carga con JPEG
Esta valiosa característica le permite a la biblioteca para reducir las imágenes JPEG como se leen desde el disco, de modo que sólo el necesario coeficientes son leer, por lo que la e/S es menor, y el consumo de memoria es mínimo.Puede masivamente a mejorar el rendimiento cuando por la ampliación de imágenes.
Ver ejemplo aquí.
Máximo definido JPEG tamaño al escribir
IM apoya la tan solicitada opción para especificar un tamaño máximo de archivo cuando la escritura de los archivos JPEG, -define jpeg:extent=400KB
por ejemplo.
De coordenadas polares se transforma
IM admite la conversión entre coordenadas cartesianas y coordenadas polares, ver -distort polar
y -distort depolar
.
Estadísticas y operaciones en áreas personalizables
Con su -statistic MxN
operador, ImageMagick puede generar muchos tipos de estadísticas y efectos.Por ejemplo, usted puede definir cada píxel en una imagen con el gradiente (diferencia entre la más brillante y la más oscura) de su 5x3 barrio:
magick image.png -statistic gradient 5x3 result.png
O usted puede definir cada píxel de la mediana de su 1x200 barrio:
magick image.png -statistic median 1x200 result.png
Ver ejemplo de aplicación aquí.
Las secuencias de imágenes
ImageMagick admite secuencias de imágenes, así que si usted tiene un conjunto de muy ruidoso, las imágenes tomadas a ISO alto, usted puede cargar toda la secuencia de imágenes y, por ejemplo, la mediana o la media de todas las imágenes para reducir el ruido.Ver el -evaluate-sequence
operador.No me refiero a la mediana en un barrio circundante en una sola imagen, me refiero a que por la búsqueda de la mediana de todas las imágenes en cada píxel de la posición.
La anterior no es una lista exhaustiva, por cualquier medio, son apenas las primeras cosas que me vino a la mente cuando pensaba en las diferencias.Yo ni siquiera mencionar el apoyo para la HEIC (Apple formato para iPhone imágenes), cada vez más común de Alto Rango Dinámico formatos tales como EXR, o cualquier otros.De hecho, si se comparan los formatos de archivo compatibles con los dos productos (gm convert -list format
y magick identify -list format
) usted encontrará que IM apoya 261 formatos y GM compatible con 192.
Como ya he dicho, diferentes personas tienen diferentes opiniones.Elige la que más te gusta y disfrutar de su uso.
Como siempre, estoy en deuda con Anthony Thyssen por su excelente visión y el discurso en ImageMagick en https://www.imagemagick.org/Usage/ Gracias también a Fred Weinhaus por sus ejemplos.
Historia
GraphicsMagick se bifurcó de ImageMagick en 2002 debido a los conflictos entre los desarrolladores fundadores. por lo tanto comparten la misma base de código.
Ref: https://en.wikipedia.org/wiki/GraphicsMagick
Goal
GraphicsMagick
- centra en simple, estable, y más clara base de código / Arquitectura
ImageMagick
- se centra en el despliegue de nuevas características, se extiende un amplio Toolbase
Además de la velocidad, ImageMagick añade una serie de herramientas de la CLI para la cáscara del terminal mientras que GraphicsMagick es una única herramienta que se puede llamar.
diseño de la interfaz CLI
GraphicsMagick
gm <command> <options> <file>
ImageMagick
convert <options> <file>
compare <options> <file>
mi humilde opinión, prefiero (de hecho, sólo use) GraphicsMagick (g) a través de ImageMagick ya que este último tiene mayor probabilidad de nombre de la herramienta choque, lo que provoca una gran cantidad de problemas en saber por qué ciertas herramientas son no se está ejecutando, especialmente durante las tareas de automatización en el servidor. En resumen GraphicsMagick tiene un diseño mucho más claro.
imaginar un binario llamado convertir en un proyecto y se lo Imagemagick de convertir o su propia herramienta de laminado en proyecto que se llama?
lista de las herramientas de ImageMagick (incluyendo convertir, comparar pantalla): https: // imagemagick.org/script/command-line-tools.php
lista de comandos GraphicsMagick: http://www.graphicsmagick.org/utilities.html
Nota:. A partir del v7 como se ha mencionado por Mark S, ImageMagick ahora se distribuye como una sola binario, así como el apoyo a los comandos v6 de edad avanzada
Rendimiento
un simple análisis de consumo de memoria se puede encontrar aquí: https://coderwall.com/p/1l7h-a/imagemagick-bloat- GraphicsMagick
Dependencias
GraphicsMagick depende de 36 bibliotecas mientras que ImageMagick requiere 64. Ref: http: //www.graphicsmagick .org / 1.3 / FAQ.html
GraphicsMagick era un tenedor temprano de Imagemagick. Usted puede leer sobre la historia de Imagemagick y el tenedor a GraphicsMagick en https://imagemagick.org/script/history. php . Parece que Imagemagick ha seguido desarrollándose en lugar ampliamente, mientras GraphicsMagick se ha mantenido más o menos estancado desde el tenedor.