Domanda

mi sono trovato valutare entrambe queste librerie. A parte quello che dice il confronto GraphicsMagick, vedo che ImageMagick ha ancora aggiornamenti e sembra che i due sono quasi identici.

Sto solo cercando di fare la manipolazione delle immagini di base in C ++ (cioè carico di immagini, filtri, display); Ci sono differenze che dovrei essere a conoscenza di quando si sceglie tra queste librerie?

È stato utile?

Soluzione

Da quello che ho letto GraphicsMagick è più stabile ed è più veloce. Ho fatto un paio di prove non scientifiche e ho trovato gm di essere due volte più veloce im (facendo un ridimensionamento).

Altri suggerimenti

Ho trovato ImageMagick per essere incredibilmente lento per l'elaborazione TIFF gruppo-4 (in bianco e nero immagini documento), dovuto principalmente al fatto che converte da 1-bit-per-pixel per 8 e viceversa per fare qualsiasi manipolazione delle immagini. Il gruppo GraphicsMagick revisionato il supporto per il formato TIFF con la loro versione 1.2, ed è molto più veloce al trattamento di questi tipi di immagini rispetto all'originale ImageMagick era. L'attuale versione stabile GraphicsMagick è a 1.3.5.

Io uso ImageMagick quando la velocità non è un fattore. Tuttavia sul lato server, dove decine di migliaia di immagini vengono elaborati quotidianamente, GraphicsMagick è abbastanza notevolmente più veloce - in alcuni casi fino al 50% più veloce nel benchmark

Come con molte cose nella vita, persone diverse hanno idee diverse su ciò che è meglio. Se chiedete ad un fotografo di paesaggio che si aggira intorno sotto la pioggia nelle montagne della Scozia, che è la migliore fotocamera al mondo, ha intenzione di dirvi un leggero, fotocamera tempo-sigillato. Chiedi un fotografo in studio, e ti dirà la più alta risoluzione con la migliore velocità di sincronizzazione del flash. E se si chiede un fotografo sportivo ti dirà quello con la messa a fuoco automatica più veloce e più alto frame rate. Così è con ImageMagick e GraphicsMagick.

Dopo aver risposto circa 2.000 StackOverflow domande sul ImageMagick nel corso degli ultimi anni 5+, faccio le seguenti osservazioni ...

In termini di popolarità ...

  • domande ImageMagick su superano quindi le domande GraphicsMagick di un fattore di 12: 1 (7.375 domande vs 611 a maggio 2019), e
  • seguaci ImageMagick su così più numerosi seguaci GraphicsMagick da 15: 1 ((387 seguaci contro 25 a maggio 2019)

In termini di prestazioni ...

Sono felice di ammettere che GraphicsMagick può essere più veloce per alcuni, ma non tutti i problemi. Tuttavia, se la velocità è la vostra considerazione più importante, penso che probabilmente si dovrebbe essere utilizzando libvips, o il codice parallelo su CPU multi-core di oggi o librerie pesantemente SIMD ottimizzato (o GPU ottimizzata) come OpenCV.

In termini di funzionalità e flessibilità ...

Non è uno molto chiaro vincitore qui - ImageMagick. La mia esperienza è che ci sono molte caratteristiche che mancano dal GraphicsMagick che sono presenti in ImageMagick e ho elencare alcuni di questi qui di seguito, in nessun ordine particolare.

Ammetto che non sono come familiarità con GraphicsMagick come lo sono io con ImageMagick, ma ho fatto del mio meglio sforzo per trovare alcuna menzione delle caratteristiche del più recente codice sorgente GraphicsMagick. Così, per Detector Canny Bordo, ho eseguito il seguente comando sul codice sorgente di GM:

find . -type f -exec grep -i Canny {} \;

e ha trovato nulla.


Algoritmo di Canny

Questo sembra essere completamente mancanti in GM. Vedere -canny radiusxsigma{+lower-percent}{+upper-percent} in IM.

Si veda l'esempio qui e campione di bordo di rilevamento su immagine Lena:

 entrare descrizione dell'immagine qui


elaborazione parentesi,, sofisticato ri-sequenziamento

Questa è una caratteristica killer di ImageMagick che mi manca spesso irritato quando dover utilizzare GM. IM può caricare o creare o clonare tutta una serie di immagini e applicare l'elaborazione differente selettivamente ad immagini specifiche e ri-sequenza, duplicare e riordinare loro molto semplice e comodo. E 'difficile trasmettere l'incredibile flessibilità di questo vi offre in una breve risposta.

Immaginate di voler fare qualcosa di abbastanza semplice come carico immagine A e sfocatura che, carico di immagini B e renderlo in scala di grigi e quindi posizionare le immagini fianco a fianco con immagine B a sinistra. Che assomiglia a questo con ImageMagick:

magick imageA.png -blur x3 \( imageB.png -colorspace gray \) +swap +append result.png

 entrare descrizione dell'immagine qui

Non si può nemmeno iniziare con GM, si lamentano le parentesi. Se si rimuove loro, sarà lamentano scambiare l'ordine delle immagini. Se si rimuove che applicherà la conversione in scala di grigi per entrambe le immagini, perché non capisce parentesi e posizionare imageA a sinistra.

Vedere i seguenti comandi di sequenziamento in IM:

  • -swap
  • -clone
  • -duplicate
  • -delete
  • -insert
  • -reverse

fx fai da te Image Processing Operatore

IM ha il -fx operatore, che permette di creare e sperimentare incredibilmente sofisticata elaborazione delle immagini. Si può avere la funzione valutata per ogni singolo pixelin un'immagine. La funzione può essere così complicato come ti piace (di salvarla in un file se si vuole) e di utilizzare tutte le operazioni matematiche, dichiarazioni ternario in stile if, riferimenti ai pixel anche in altre immagini e la loro luminosità o la saturazione e così via.

Qui ci sono un paio di esempi:

magick rose: -channel G -fx 'sin(pi*i/w)' -separate   fx_sine_gradient.gif

 entrare descrizione dell'immagine qui

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

 entrare descrizione dell'immagine qui

Una risposta StackOverflow che utilizza questa funzione con grande efficacia nella lavorazione di green-screen immagini (crominanza con la carrozzeria) è qui .


Fourier (dominio della frequenza) Analisi

Non sembra esserci alcuna menzione di marcia avanti o indietro Analisi di Fourier in GM, né l'appoggio High Dynamic Range (vedi in seguito) che è tipicamente richiesto per sostenerlo. Vedere -fft in IM.


Component Analysis / Etichettatura / Analisi Blob

connected

Non sembra esserci alcun "Connected Component Analysis" in GM - noto anche come "etichettatura" e "Analisi Blob" . Vedere -connected-components connectivity per 4 e 8 collegato analisi blob.

Questa caratteristica da sola ha fornito risposte 60+ - vedi qui

.

Hough Line Detection

Sembra che ci sia nessun rilevamento Linea Hough in GM. Vedere -hough-lines widthxheight{+threshold} in IM.

Vedi descrizione della funzione qui e seguendo l'esempio di linee rilevate:

 entrare descrizione dell'immagine qui


Momenti e percettiva Hash (phash)

Non sembra esserci alcun supporto per i momenti di immagine calcolo (baricentri e gli ordini superiori), né hashing percettiva in GM. Vedere -moments in IM.


Morfologia

Sembra che ci sia alcun supporto per l'elaborazione morfologica in GM. In IM c'è il supporto sofisticato per:

  • dilatazione
  • erosione
  • apertura morfologica e chiusura
  • scheletrizzazione
  • distanza morfologia
  • cappello a cilindro e cappello sotto la morfologia
  • incostante morfologia - linea termina, giunzioni linea, cime, creste, convesso Gusci etc

Vedere tutta la sofisticata elaborazione si può fare con questa grande esercitazione .


Contrasto Limitato Adaptive Istogramma Equalizzazione - CLAHE

Sembra che ci sia alcun supporto per contrasto limitata Adaptive Istogramma equalizzazione in GM. Vedere -clahe widthxheight{%}{+}number-bins{+}clip-limit{!} in IM.


HDRI - High Dynamic Range Imaging

Non sembra esserci alcun supporto per High Dynamic Range Imaging in GM -. Soli 8, 16, e tipi interi a 32 bit


Convoluzione

ImageMagick supporta molti tipi di convoluzione:

  • Differenza di gaussiane DoG
  • Laplacian
  • Sobel
  • Bussola
  • Prewitt
  • Roberts
  • Frei-Chen

Nessuno di questi sono menzionati nel codice sorgente di GM.


Magick Registrati persistente (MPR)

Questa è una caratteristica presente prezioso ImageMagick che consente di scrivere i risultati intermedi di elaborazione a blocchi nome della memoria durante la lavorazione senza il sovraccarico di scrittura su disco. Ad esempio, è possibile preparare una texture o un modello e poi tegola sopra un'immagine, o preparare una maschera e poi modificare ed applicare più tardi nello stesso processo senza andare a disco.

Ecco un esempio:

 magick tree.gif -flip -write mpr:tree +delete -size 64x64 tile:mpr:tree mpr_tile.gif

entrare descrizione dell'immagine qui


Broader spazio colore di sostegno

IM supporta i seguenti colourspaces non si trovano in GM:

  • CIELab
  • HCL
  • HSI
  • LMS
  • altri.

Pango Support

IM supporta Pango Text Markup Language, che è simile a HTML e consente di annotare le immagini con il testo che cambia:

  • font, colore, dimensioni, peso, il corsivo
  • pedice, apice, strike-through
  • Motivazione

metà di una frase e molto, molto di più. C'è una grande href="https://www.imagemagick.org/Usage/text/#pango" esempio qui .

 entrare descrizione dell'immagine qui


Shrink-carico con JPEG

Questa funzione permette preziosa biblioteca a ridursi immagini JPEG in cui vengono letti dal disco, in modo che solo i coefficienti necessari vengono letti, quindi l'I / O è diminuita, e il consumo di memoria è ridotto al minimo. Può massicciamente migliorare le prestazioni quando down-ridimensionamento delle immagini.

Si veda l'esempio qui .


Definito dimensione massima JPEG quando si scrive

IM supporta l'opzione molto richiesta per specificare uno spazio massimo durante la scrittura di file JPEG, -define jpeg:extent=400KB per esempio.


coordinate polari Trasforma

IM supporta la conversione tra coordinate cartesiane e polari, vedere -distort polar e -distort depolar.


Statistiche e impianti su aree personalizzabili

Con il suo operatore -statistic MxN, ImageMagick può generare molti tipi di utili statistiche ed effetti. Ad esempio, è possibile impostare ogni pixel in un'immagine al gradiente (differenza tra chiari e più scuri) del suo quartiere 5x3:

magick image.png -statistic gradient 5x3 result.png

In alternativa, è possibile impostare ogni pixel per la mediana del suo quartiere 1x200:

magick image.png -statistic median 1x200 result.png

Si veda l'esempio di applicazione qui .

 entrare descrizione dell'immagine qui


sequenze di immagini

ImageMagick supporta sequenze di immagini, quindi se avete una serie di immagini molto rumorosi sparato ad alta ISO, è possibile caricare l'intera sequenza di immagini e, ad esempio, prendere la mediana o media di tutte le immagini per ridurre il rumore. Vedere la -evaluate-sequence dell'operatore. Non voglio dire la mediana in un quartiere che circonda in una singola immagine, voglio dire, trovando la mediana di tutte le immagini in ogni posizione di pixel.


È possibile che questo non è un elenco esaustivo con qualsiasi mezzo, sono solo le prime cose che è venuto in mente quando ho pensato a delle differenze. Non ho nemmeno menzionato il supporto per HEIC (formato di Apple per le immagini di iPhone), formati sempre più comuni High Dynamic Range, come EXR, o tutti gli altri. Infatti, se si confrontano i formati di file supportati dai due prodotti (gm convert -list format e magick identify -list format) troverete che IM supporta 261 formati e GM supporta 192.

Come ho detto, persone diverse hanno opinioni diverse. Scegli quello che ti piace e godere di usarlo.

Come sempre, sono in debito con Anthony Thyssen per le sue eccellenti intuizioni e discorso su ImageMagick a https: // www .imagemagick.org / Uso / Grazie anche a Fred Weinhaus per i suoi esempi.

Storia

GraphicsMagick stato biforcuta da ImageMagick nel 2002 a causa di controversie tra gli sviluppatori fondatori. in tal modo essi condividono la stessa base di codice.

Rif: https://en.wikipedia.org/wiki/GraphicsMagick

Obiettivo

GraphicsMagick

  • concentra sulla semplice, stabile, e più chiara codebase / architettura

ImageMagick

  • concentra sulla stendere nuove caratteristiche, si estende un ampio toolbase

Oltre velocità, imagemagick aggiunge una serie di strumenti CLI per coperture terminale che GraphicsMagick è un unico strumento che può essere richiamato.

design di interfaccia CLI

GraphicsMagick

gm <command> <options> <file>

ImageMagick

convert <options> <file>
compare <options> <file>

imho, preferisco (in realtà, usare solo) GraphicsMagick (gm) su ImageMagick in quanto quest'ultimo ha maggiore probabilità di nome strumento scontro, che provoca un sacco di problemi a trovare il motivo per cui alcuni strumenti sono non è in esecuzione, in particolare durante i compiti di automazione lato server. in sintesi GraphicsMagick ha un design molto più chiara.

immaginare un binario chiamato convertire in un progetto e si è ImageMagick del convertire o il proprio strumento di laminati nel progetto che si chiamerà?

elenco degli strumenti ImageMagick (tra cui la conversione, confrontare, display): https: // imagemagick.org/script/command-line-tools.php

lista dei comandi GraphicsMagick: http://www.graphicsmagick.org/utilities.html

nota:. Al v7 come detto da Mark S, imagemagick è ora distribuito come singolo binario, e anche supportare comandi v6 anziane

Prestazioni

un semplice test il consumo di memoria può essere trovato qui: https://coderwall.com/p/1l7h-a/imagemagick-bloat- GraphicsMagick

dipendenze

GraphicsMagick dipende da 36 biblioteche, mentre ImageMagick richiede 64. Rif: http: //www.graphicsmagick .org / 1.3 / faq.html

GraphicsMagick era un fork presto da Imagemagick. È possibile leggere la storia di Imagemagick e la forcella a GraphicsMagick a https://imagemagick.org/script/history. php . Sembra che Imagemagick ha continuato ad essere sviluppato piuttosto esteso, mentre GraphicsMagick è rimasta più o meno stagnanti dal forcella.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top