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?

Foi útil?

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:

 enter descrição da imagem aqui


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

 enter descrição da imagem aqui

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

 enter descrição da imagem aqui

magick -size 80x80 xc: -channel G -fx  'sin((i-w/2)*(j-h/2)/w)/2+.5' -separate fx_2d_gradient.gif

 enter descrição da imagem aqui

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:

 enter descrição da imagem aqui


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

 enter descrição da imagem aqui


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 .

 enter descrição da imagem 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 .

 enter descrição da imagem 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

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top