Qual é a diferença entre o ImageMagick e GraphicsMagick?
-
21-08-2019 - |
Pergunta
Eu encontrei-me avaliar ambas as libs. Além do que a comparação GraphicsMagick diz, vejo que ImageMagick ainda tem atualizações e parece que os dois são quase idênticos.
Eu estou apenas olhando para fazer manipulação básica de imagem em C ++ (ou seja, imagem de carga, filtros, display); existem diferenças que eu deveria estar ciente de quando escolher entre essas bibliotecas?
Solução
De GraphicsMagick que tenho lido é mais estável e é mais rápido. Eu fiz um par de testes não-científicas e encontrou gm ser duas vezes mais rápido que im (fazendo um redimensionamento).
Outras dicas
Eu encontrei ImageMagick para ser incrivelmente lento para o processamento de TIFF grupo 4 imagens (B & imagens de documentos W), principalmente devido ao fato de que ele converte a partir de 1-bit-per-pixel a 8 e de volta para fazer qualquer manipulação de imagem. O grupo GraphicsMagick revisou o suporte ao formato TIFF com a sua versão 1.2, e é muito mais rápido no processamento desses tipos de imagens que o ImageMagick originais era. A versão atual estável GraphicsMagick é a 1.3.5.
Eu uso o ImageMagick quando a velocidade não é um fator. No entanto no lado do servidor, onde dezenas de milhares de imagens estão sendo processados ??diariamente, GraphicsMagick é bastante visivelmente mais rápido - em alguns casos até 50% mais rápido em benchmarks
Tal como acontece com muitas coisas na vida, pessoas diferentes têm idéias diferentes sobre o que é melhor. Se você pedir a um fotógrafo de paisagem que vagueia em torno da chuva nas montanhas da Escócia, que é a melhor câmera do mundo, ele vai dizer-lhe um peso-leve, câmera resistente à intempérie. Pedir a um fotógrafo de estúdio, e ele vai dizer-lhe o maior resolução com a melhor velocidade de sincronização do flash. E se você perguntar a um fotógrafo esportivo ele vai lhe dizer o único com a focagem automática mais rápida e mais alta taxa de quadros. Assim é com ImageMagick e GraphicsMagick.
Tendo respondido cerca de 2.000 perguntas StackOverflow sobre ImageMagick ao longo dos últimos 5 anos ou mais, faço as seguintes observações ...
Em termos de popularidade ...
- perguntas ImageMagick no SO superam perguntas GraphicsMagick por um fator de 12: 1 (7.375 perguntas vs 611 em maio 2019), e
- seguidores ImageMagick sobre SO superam seguidores GraphicsMagick de 15: 1 ((387 seguidores versus 25 em maio 2019)
Em termos de desempenho ...
Fico feliz em admitir que GraphicsMagick pode ser mais rápido para alguns, mas não todos os problemas. No entanto, se a velocidade é sua consideração mais importante, eu acho que você provavelmente deve estar usando o libvips
, ou código paralelo em CPUs de hoje multi-core ou bibliotecas fortemente SIMD otimizados (ou GPU-otimizadas) como OpenCV.
Em termos de recursos e flexibilidade ...
Há um vencedor muito claro aqui - ImageMagick. Minha experiência é que há muitas características em falta a partir GraphicsMagick que estão presentes em ImageMagick e eu listar alguns deles abaixo, em nenhuma ordem particular.
Admito que eu não sou tão familiarizado com GraphicsMagick como estou com ImageMagick, mas eu fiz o meu melhor esforço para encontrar qualquer menção das características no código fonte GraphicsMagick mais recente. Assim, por Canny Borda Detector, eu corri o seguinte comando no código fonte GM:
find . -type f -exec grep -i Canny {} \;
e não encontrou nada.
Canny Borda detector
Esta parece ser completamente ausente na GM. Veja -canny radiusxsigma{+lower-percent}{+upper-percent}
em IM.
Veja o exemplo aqui e amostra de de detecção de bordas em imagem Lena:
processamento Parenthesised, sofisticado re-seqüenciamento
Esta é uma característica do assassino do ImageMagick que eu freqüentemente intensamente perder ao ter que usar GM. IM pode carregar, ou criar, ou um clone de uma série de imagens e aplicar o processamento diferente selectivamente a imagens específicas e re-sequência, duplicar e re-ordenar-lhes muito simplesmente e convenientemente. É difícil transmitir a incrível flexibilidade Isto proporciona-lhe em uma resposta curta.
Imagine que você quer fazer algo bastante simples como carregar uma imagem e esbater-lo, a carga imagem B e torná-lo tons de cinza e, em seguida, colocar as imagens lado a lado com imagem B no lado esquerdo. Que se parece com isso com ImageMagick:
magick imageA.png -blur x3 \( imageB.png -colorspace gray \) +swap +append result.png
Você não pode sequer começar com a GM, ele vai reclamar sobre os parênteses. Se você removê-los, ele vai reclamar trocando a ordem de imagem. Se você remover que aplicará a conversão em escala de cinza para ambas as imagens porque não entende parênteses e lugar imageA à esquerda.
Veja os seguintes comandos de sequenciamento no IM:
-
-swap
-
-clone
-
-duplicate
-
-delete
-
-insert
-
-reverse
fx DIY de Processamento de Imagens Operador
IM tem aoperador -fx
que lhe permite criar e experimentar com processamento de imagem extremamente sofisticado. Você pode ter a função avaliados para cada pixel de uma imagem. A função pode ser tão complicado como você gosta (salvá-lo em um arquivo se você quiser) e usar todas as operações matemáticas, declarações if
de estilo ternário, as referências a pixels mesmo em outras imagens e seu brilho ou saturação e assim por diante.
Aqui estão alguns exemplos:
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
A StackOverflow resposta que usa esse recurso para grande efeito no processamento de tela verde imagens (chroma-chaveado) é aqui .
Fourier (domínio da freqüência) Análise
Parece haver nenhuma menção de avanço ou retrocesso análise de Fourier no GM, nem o apoio de High Dynamic Range (ver mais adiante), que é normalmente necessária para apoiá-lo. Veja -fft
em IM.
Conectado Análise de Componentes / Rotulagem / Análise Blob
Parece haver "Análise de Componentes Conectado" no na GM - também conhecido como "rotulagem" e "Análise Blob" . Veja -connected-components connectivity
para 4 e análise blob 8-conectado.
Este recurso só tem fornecido mais de 60 respostas -. Consulte aqui
Hough Detecção de Linha
Não parece haver nenhuma Line Detection Hough na GM. Veja -hough-lines widthxheight{+threshold}
em IM.
Veja a descrição do recurso aqui e seguindo o exemplo de linhas detectadas:
Momentos e Perceptual Hash (pHash)
Parece haver nenhum suporte para momentos de imagem de cálculo (centroids e ordens superiores), nem Perceptual Hashing na GM. Veja -moments
em IM.
Morfologia
Parece haver nenhum suporte para processamento morfológico na GM. Em IM há suporte sofisticado para:
- dilatação
- erosão
- abertura morfológica e fechamento
- skeletonisation
- morfologia distância
- cartola e morfologia chapéu de fundo
- ir e perder morfologia - linha termina, junções de linha, picos, cumes, etc. Convexo Cascos
Veja todo o processamento sofisticado que pode fazer com este grande tutorial .
Contraste limitada Adaptive Histograma Equalização - CLAHE
Parece haver nenhum suporte para Contrast limitada Adaptive Histograma Equalização na GM. Veja -clahe widthxheight{%}{+}number-bins{+}clip-limit{!}
em IM.
HDRI - High Dynamic Range Imaging
Parece haver nenhum suporte para High Dynamic Range Imaging na GM -. Apenas a 8, 16 e 32-bit inteiro tipos
Convolution
ImageMagick suporta muitos tipos de convolução:
- Diferença de gaussianas DoG
- Laplacian
- Sobel
- Compass
- Prewitt
- Roberts
- Frei-Chen
Nenhum destes são mencionados no código fonte GM.
Magick persistente Register (MPR)
Este é um recurso inestimável presente em ImageMagick que lhe permite escrever processamento de resultados intermediários para pedaços chamados de memória durante o processamento sem a sobrecarga de escrita para o disco. Por exemplo, você can preparar uma textura ou padrão e, em seguida, telha-lo sobre uma imagem, ou preparar uma máscara e, em seguida, alterá-lo e aplicá-lo mais tarde no mesmo processamento sem ir para o disco.
Aqui está um exemplo:
magick tree.gif -flip -write mpr:tree +delete -size 64x64 tile:mpr:tree mpr_tile.gif
Maior Apoio colourspace
IM suporta os seguintes colourspaces não encontradas em GM:
- CIELab
- HCL
- HSI
- LMS
- outros.
Pango Suporte
IM suporta Pango Text Markup Language, que é semelhante ao HTML e permite imagens anotar com texto que alterações:
- fonte, cor, tamanho, peso, itálico
- subscrito, sobrescrito, tachado
- Justificação
no meio da frase e muito, muito mais. Há um grande exemplo aqui .
Encolher-on-carga com JPEG
Este recurso inestimável permite que a biblioteca a encolher imagens JPEG como eles são lidos do disco, de modo que apenas os coeficientes necessários são lidos, de modo que o I / O é menor, e o consumo de memória é minimizado. Pode maciçamente melhorar o desempenho quando down-escalonamento de imagens.
Veja o exemplo aqui .
máximos definidos tamanho JPEG ao escrever
IM suporta a opção muito solicitado para especificar um tamanho limite ao escrever arquivos JPEG, -define jpeg:extent=400KB
por exemplo.
coordenadas polares transforma
IM suporta a conversão entre coordenadas cartesianas e polares, ver -distort polar
e -distort depolar
.
Estatística e operações sobre áreas personalizáveis ??
Com o seu operador -statistic MxN
, ImageMagick pode gerar muitos tipos úteis de estatísticas e efeitos. Por exemplo, você pode configurar cada pixel de uma imagem para o gradiente (diferença entre claras e mais escuras) de sua vizinhança 5x3:
magick image.png -statistic gradient 5x3 result.png
Ou você pode definir cada pixel com a mediana de seu bairro 1x200:
magick image.png -statistic median 1x200 result.png
Veja o exemplo de aplicação aqui .
sequências de imagens
ImageMagick suporta sequências de imagens, por isso, se você tem um conjunto de imagens muito ruidosos baleado em ISO elevado, você pode carregar toda a seqüência de imagens e, por exemplo, tomar a mediana ou a média de todas as imagens para reduzir o ruído. Veja o operador -evaluate-sequence
. Não me refiro a mediana em uma vizinhança em uma única imagem, refiro-me por encontrar a mediana de todas as imagens em cada posição pixel.
O acima não é uma lista exaustiva, por qualquer meio, eles são apenas as primeiras coisas que me veio à mente quando eu pensei sobre as diferenças. Eu nem sequer mencionar o suporte para HEIC (formato da Apple para imagens para iPhone), formatos cada vez mais comuns High Dynamic Range, como EXR, ou quaisquer outros. Na verdade, se você comparar os formatos de arquivos suportados pelos dois produtos (gm convert -list format
e magick identify -list format
) você vai achar que IM suporta 261 formatos e GM suporta 192.
Como eu disse, as pessoas diferentes têm opiniões diferentes. Escolha o que você gosta e desfrutar de usá-lo.
Como sempre, sou grato a Anthony Thyssen por suas excelentes idéias e discursos sobre ImageMagick em https: // www .imagemagick.org / uso / graças também ao Fred Weinhaus para o seu eexemplos.
Histórico
GraphicsMagick foi bifurcada de imagemagick em 2002 devido a disputas entre desenvolvedores fundadores. assim, eles compartilham a mesma base de código.
Ref: https://en.wikipedia.org/wiki/GraphicsMagick
Meta ??h1>
GraphicsMagick
- centra-se em simples, estável, e mais clara base de código / Arquitectura
imagemagick
- focos no lançamento dos novos recursos, estender uma toolbase mais amplo
Além de velocidade, imagemagick acrescenta uma série de ferramentas CLI para terminal shell enquanto GraphicsMagick é uma única ferramenta que você pode chamar.
CLI interface de design
GraphicsMagick
gm <command> <options> <file>
imagemagick
convert <options> <file>
compare <options> <file>
IMHO, eu prefiro (na verdade, apenas para uso) GraphicsMagick (gm) sobre imagemagick em que esta tem maior chance de confronto nome da ferramenta, o que causa muitos problemas em descobrir porque certas ferramentas são não correr, especialmente durante tarefas de automação do lado do servidor. Em resumo GraphicsMagick tem um design muito mais clara.
imaginar um binário chamado convertido em um projeto e ele é convertido do imagemagick ou sua própria ferramenta rolou no projeto que será chamado?
lista de ferramentas imagemagick (incluindo convertido, comparar, display): https: // imagemagick.org/script/command-line-tools.php
lista de comandos GraphicsMagick: http://www.graphicsmagick.org/utilities.html
Nota:. A partir de v7 como mencionado por Mark S, imagemagick é agora distribuído como único binário e também apoiar comandos v6 mais velhos
Desempenho
um teste de consumo de memória simples pode ser encontrada aqui: https://coderwall.com/p/1l7h-a/imagemagick-bloat- GraphicsMagick
Dependências
GraphicsMagick depende em 36 bibliotecas enquanto ImageMagick requer 64. Ref: http: //www.graphicsmagick .org / 1,3 / faq.html
GraphicsMagick era um fork cedo do Imagemagick. Você pode ler sobre a história de Imagemagick eo garfo para GraphicsMagick em https://imagemagick.org/script/history. php . Parece que Imagemagick continuou a ser desenvolvido em vez extensivamente, enquanto GraphicsMagick manteve-se mais ou menos estagnada desde o garfo.