Was ist der Unterschied zwischen ImageMagick und GraphicsMagick?
-
21-08-2019 - |
Frage
Ich habe beide Bibliotheken evaluiert.Abgesehen von dem, was der GraphicsMagick-Vergleich sagt, sehe ich, dass ImageMagick immer noch Updates erhalten hat und es scheint, dass die beiden fast identisch sind.
Ich möchte nur grundlegende Bildmanipulationen in C++ durchführen (d. h.Bild laden, Filter, Anzeige);Gibt es irgendwelche Unterschiede, die ich bei der Auswahl zwischen diesen Bibliotheken beachten sollte?
Lösung
Von dem, was ich habe GraphicsMagick stabiler und schneller. Ich habe ein paar unwissenschaftlich Tests und fand gm doppelt so schnell sein wie im (dabei eine Größe ändern).
Andere Tipps
fand ich ImageMagick unglaublich langsam zu sein für die Verarbeitung von TIFF-Gruppe-4-Bilder (B & W Dokumentenbilder), vor allem aufgrund der Tatsache, dass es wandelt von 1-Bit-pro-Pixel bis 8 und wieder jede Bildbearbeitung zu tun. Die GraphicsMagick Gruppe überholte die TIFF-Format-Unterstützung mit ihrer Version 1.2, und es ist viel schneller bei der Verarbeitung diese Art von Bildern als das Original ImageMagick war. Die aktuelle stabile Version ist GraphicsMagick bei 1.3.5.
ich ImageMagick verwenden, wenn die Geschwindigkeit keine Rolle spielt. Jedoch auf der Serverseite, wo Zehntausende von Bildern täglich verarbeitet werden, GraphicsMagick ist ganz deutlich schneller - in einigen Fällen bis zu 50% schneller in Benchmarks
Wie bei vielen Dingen im Leben, haben verschiedene Menschen unterschiedliche Vorstellungen darüber, was am besten ist. Wenn Sie einen Landschaftsfotografen fragen, um in Schottland Berge im regen wandert, die die beste Kamera in der Welt, er wird Ihnen eine leichte, wetter versiegelt Kamera erzählen. Stellen Sie einen Studiofotografen, und er wird Ihnen sagen, die höchste Auflösung mit der besten Blitzsynchronzeit. Und wenn Sie einen Sport-Fotografen fragen wird er Ihnen sagen, die man mit dem schnellsten Autofokus und höchster Bildrate. So ist es mit ImageMagick und GraphicsMagick.
Nachdem rund 2.000 Fragen auf Stackoverflow ImageMagick in den letzten 5 Jahren antwortet ich die folgenden Beobachtungen ...
In der Beliebtheitsskala ...
- ImageMagick Fragen auf SO GraphicsMagick Fragen um den Faktor 12 übertreffen: 1 (7375 Fragen vs 611 im Mai 2019) und
- ImageMagick Anhänger auf SO GraphicsMagick Anhänger zahlreicher als von 15: 1 ((387 Anhängern gegenüber 25 im Mai 2019)
In Bezug auf Leistung ...
Ich bin glücklich, zugeben, dass GraphicsMagick für einige sein kann schneller, aber nicht alle Probleme. Wenn jedoch Geschwindigkeit Ihre wichtigste Überlegung ist, denke ich, sollten Sie wahrscheinlich entweder libvips
oder parallel Code auf dem heutigen Multi-Core-CPUs oder stark SIMD-optimiert (oder GPU-optimized) Bibliotheken wie OpenCV werden.
In Bezug auf die Funktionen und Flexibilität ...
Es gibt einen sehr klaren Sieger hier - ImageMagick. Meine Erfahrung ist, dass es viele Funktionen von GraphicsMagick fehlen, die in ImageMagick vorhanden sind und ich Liste einige dieser unten, in keiner bestimmten Reihenfolge.
Ich gebe offen Ich bin nicht so vertraut mit GraphicsMagick wie ich mit ImageMagick bin, aber ich habe mein Bestes Aufwand jede Erwähnung der Features in dem jüngsten GraphicsMagick Quellcode zu finden. Also, für Canny-Algorithmus, lief ich den folgenden Befehl auf dem GM-Quellcode:
find . -type f -exec grep -i Canny {} \;
und nichts gefunden.
Canny-Algorithmus
Dies scheint in GM vollständig fehlen. Siehe -canny radiusxsigma{+lower-percent}{+upper-percent}
in IM.
Siehe Beispiel hier und Probe von Kantenerkennung auf Lena Bild:
Parenthesised Verarbeitung, anspruchsvolle Resequenzierung
Dies ist ein Killer-Feature von ImageMagick, die ich häufig schmerzlich vermissen, wenn mit GM zu verwenden. IM kann laden oder erstellen oder eine ganze Reihe von Bildern klonen und unterschiedliche Verarbeitung gilt selektiv auf bestimmte Bilder und Re-Sequenz, duplizieren und neu, um sie sehr einfach und bequem. Es ist schwer, die unglaubliche Flexibilität dies bietet Ihnen in einer kurzen Antwort zu übermitteln.
Stellen Sie sich etwas ziemlich einfach wie Last Bild A tun wollen und Unschärfe es, Last Bild B und macht es Graustufen- und dann die Bilder Seite an Seite legen mit Bild B auf der linken Seite. Das sieht dann so mit ImageMagick:
magick imageA.png -blur x3 \( imageB.png -colorspace gray \) +swap +append result.png
Sie können nicht einmal mit GM beginnen, wird es über die Klammern beschweren. Wenn Sie sie entfernen, wird es beklagen das Bild, um über Swapping. Wenn Sie entfernen, dass sie die Graustufen- Umwandlung in beiden Bildern anwenden wird, weil es nicht Klammern verstehen und legen imageA auf der linken Seite.
Auch die folgenden Sequenzierungs Befehle in IM:
-
-swap
-
-clone
-
-duplicate
-
-delete
-
-insert
-
-reverse
fx DIY Bildverarbeitung Operator
IM hat die-fx
Betreiber, die Sie mit unglaublich hoch entwickelte Bildverarbeitung erstellen und experimentieren können. Sie können Funktion für jedes einzelne Pixel in einem Bild ausgewertet haben. Die Funktion kann so kompliziert sein, wie Sie möchten (in einer Datei speichern, wenn Sie möchten) und verwenden, um alle mathematischen Operationen, ternäre Stil if
Aussagen, Verweise auf Pixel auch in anderen Bildern und deren Helligkeit oder Sättigung und so weiter.
Hier sind ein paar Beispiele:
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
Eine Antwort, die Stackoverflow bei der Verarbeitung von Green-Screen (Chroma-verkeilte) diese Funktion, um große Wirkung verwendet, um Bilder hier .
Fourier (Frequenzbereich) Analyse
Es scheint keine Erwähnung von Vorwärts- oder Rückwärts-Fourier-Analyse in GM zu sein, noch die High Dynamic Range-Unterstützung (siehe weiter unten), die normalerweise erforderlich ist, um es zu unterstützen. Siehe -fft
in IM.
Connected Component Analysis / Labeling / Blob-Analyse
Es scheint keine "Connected Component Analysis" zu sein in GM - auch als "Etikettierung" bekannt und "Blob-Analyse" . Siehe -connected-components connectivity
für 4- und 8-connected Blob-Analyse.
Diese Funktion allein hat bereitgestellt 60+ Antworten - hier
.Hough Line Detection
Es scheint keine Hough Line Detection in GM zu sein. Siehe -hough-lines widthxheight{+threshold}
in IM.
Beschreibung des Merkmals hier und folgendes Beispiel detektiert Zeilen:
Moments und Perceptual Hash (pHash)
Es scheint keine Unterstützung für die Bild Moment Berechnung (Zentroide und höhere Ordnung) zu sein, noch Perceptual Hashing in GM. Siehe -moments
in IM.
Morphologie
Es scheint keine Unterstützung für Morphologische Verarbeitung in GM zu sein. In IM gibt es anspruchsvolle Unterstützung für:
- Erweiterung
- Erosion
- morphologisches Öffnen und Schließen
- Skelettierung
- Abstand Morphologie
- Zylinder und untere Hut Morphologie
- Hit and Miss Morphologie - Linie endet, Linie Kreuzungen, Gipfel, Grate, Convex Hulls usw.
alle anspruchsvolle Verarbeitung finden Sie diesem großen Tutorial tun können.
Kontrast Begrenzt Adaptive Histogram Equalization - CLAHE
Es erscheint in GM keine Unterstützung für Contrast Begrenzte Adaptive Histogram Equalization zu sein. Siehe -clahe widthxheight{%}{+}number-bins{+}clip-limit{!}
in IM.
HDRI - High Dynamic Range Imaging
Es scheint keine Unterstützung für High Dynamic Range Imaging in GM zu sein -. Nur 8, 16 und 32-Bit-Integer-Typen
Convolution
ImageMagick unterstützt viele Arten von Faltungs:
- Differenz der Mittelwerte DoG
- Laplace
- Sobel
- Kompass
- Prewitt
- Robert
- Frei-Chen
Keine von diesen sind in der GM-Quellcode erwähnt.
Magick Persistent Register (MPR)
Dies ist eine unschätzbare Funktion in ImageMagick, die Sie Zwischenverarbeitungsergebnisse zu dem Namen Speicherblöcke während der Verarbeitung ohne den Aufwand des Schreibens auf die Platte zu schreiben. Zum Beispiel, ca Sien bereiten eine Textur oder Muster und dann Fliese es über ein Bild oder eine Maske herzustellen und sie dann verändern und wenden Sie es später in der gleichen Verarbeitung ohne auf die Platte zu gehen.
Hier ist ein Beispiel:
magick tree.gif -flip -write mpr:tree +delete -size 64x64 tile:mpr:tree mpr_tile.gif
Breitere Farbraum Unterstützung
IM unterstützt die folgenden colourspaces nicht in GM gefunden:
- CIELab
- HCL
- HSI
- LMS
- andere.
Pango Unterstützung
IM unterstützt Pango Text Markup Language, die HTML sehr ähnlich ist und ermöglicht es Ihnen, Bilder mit Text mit Anmerkungen versehen, dass Änderungen:
- Schriftart, Farbe, Größe, Gewicht, kursiv
- Index, Hochgestellt, das Durchschlagen
- Begründung
mitten im Satz und vieles, vieles mehr. Es ist ein großartiges Beispiel hier .
Shrink-on-Last mit JPEG
Diese unschätzbare Funktion erlaubt die Bibliothek JPEG-Bilder zu schrumpfen, wie sie von der Festplatte gelesen werden, so dass nur die notwendigen Koeffizienten gelesen werden, so dass das I / O wird verringert, und der Speicherverbrauch minimiert wird. Es kann massiv die Leistung verbessern, wenn Bilder nach unten skaliert werden.
Siehe Beispiel hier .
definierte maximale JPEG Größe beim Schreiben
IM unterstützt die viel geforderte Option, um eine maximale Dateigröße angeben, wenn JPEG-Dateien zu schreiben, -define jpeg:extent=400KB
zum Beispiel.
Polarkoordinatentransformationen
IM unterstützt die Konvertierung zwischen kartesisch und Polarkoordinaten finden -distort polar
und -distort depolar
.
Statistiken und Operationen auf anpassbare Bereiche
Mit seinem -statistic MxN
Operator kann ImageMagick viele nützliche Arten von Statistiken und Effekte erzeugen. Zum Beispiel können Sie jedes Pixel in einem Bild zu dem Gradienten (Differenz zwischen hellsten und dunkelsten) seinem 5x3-Viertels:
magick image.png -statistic gradient 5x3 result.png
Sie können auch jedes Pixel auf dem Median seiner 1x200-Viertels:
magick image.png -statistic median 1x200 result.png
Siehe Anwendungsbeispiel hier .
Sequenzen von Bildern
ImageMagick unterstützt Sequenzen von Bildern, so dass, wenn Sie eine Reihe von sehr verrauschte Bilder haben ein Schuss bei hohen ISO, können Sie die gesamte Sequenz von Bildern und zum Beispiel nehmen den Median oder Mittelwert aller Bilder Rauschen zu reduzieren laden. Siehe die -evaluate-sequence
Betreiber. Ich meine nicht den Median in einer Nachbarschaft in einem einzigen Bild, ich meine durch den Median aller Bilder an jeder Pixelposition zu finden.
Das obige ist keine vollständige Liste mit allen Mitteln, sie sind nur die ersten paar Dinge, die in den Sinn kam, als ich über die Unterschiede gedacht. Ich habe erwähnt für HEIC (Apples Format für iPhone Bilder), immer häufiger High Dynamic Range-Formate wie EXR, oder jede andere nicht einmal Unterstützung. In der Tat, wenn Sie die Dateiformate werden unterstützt durch die beiden Produkte (gm convert -list format
und magick identify -list format
) vergleichen werden Sie feststellen, dass IM unterstützt 261 Formate und GM unterstützt 192.
Wie gesagt, haben verschiedene Menschen verschiedene Meinungen. Wählen Sie, was Sie mögen und genießen Sie es.
Wie immer, ich bin zu Anthony Thyssen verschuldete für seine hervorragenden Einblicke und Diskurs über ImageMagick unter https: // www .imagemagick.org / Verwendung / Dank auch an Fred Weinhaus für seine EBeispiele.
Geschichte
Graphicsmagick wurde 2002 aufgrund von Streitigkeiten zwischen den Gründungsentwicklern von Imagemagick abgespalten.Daher teilen sie sich die gleiche Codebasis.
Ref: https://en.wikipedia.org/wiki/GraphicsMagick
Ziel
Grafikmagie
- konzentriert sich auf eine einfache, stabile und klarere Codebasis/Architektur
Bildmagie
- konzentriert sich auf die Einführung neuer Funktionen und die Erweiterung einer breiteren Toolbasis
Abgesehen von der Geschwindigkeit fügt Imagemagick der Terminal-Shell eine Reihe von CLI-Tools hinzu, während Graphicsmagick ein einzelnes Tool ist, das Sie aufrufen können.
CLI-Schnittstellendesign
Grafikmagie
gm <command> <options> <file>
Bildmagie
convert <options> <file>
compare <options> <file>
Imho, ich bevorzuge (eigentlich nur Verwendung) Graphicsmagick(gm) gegenüber Imagemagick, da bei Letzterem die Wahrscheinlichkeit eines Konflikts zwischen Tool-Namen höher ist, was zu vielen Problemen bei der Feststellung führt, warum bestimmte Tools nicht ausgeführt werden, insbesondere bei serverseitigen Automatisierungsaufgaben.Zusammenfassend lässt sich sagen, dass GraphicsMagick ein viel klareres Design hat.
Stellen Sie sich eine Binärdatei mit dem Namen „convert“ in einem Projekt vor, und wird dann „convert“ von imagemagick oder Ihr eigenes gerolltes Tool im Projekt aufgerufen?
Liste der Imagemagick-Tools (einschließlich Konvertieren, Vergleichen, Anzeigen): https://imagemagick.org/script/command-line-tools.php
Liste der Graphicsmagick-Befehle:http://www.graphicsmagick.org/utilities.html
Notiz :Ab Version 7 wird Imagemagick, wie von Mark S erwähnt, nun als einzelne Binärdatei verteilt und unterstützt auch ältere Befehle der Version 6.
Leistung
Einen einfachen Speicherverbrauchstest finden Sie hier:https://coderwall.com/p/1l7h-a/imagemagick-bloat-graphicsmagick
Abhängigkeiten
GraphicsMagick benötigt 36 Bibliotheken, während ImageMagick 64 benötigt.Ref: http://www.graphicsmagick.org/1.3/FAQ.html
GraphicsMagick war eine frühe Gabel von ImageMagick. Sie können über ImageMagicks Geschichte und die Gabel GraphicsMagick unter https://imagemagick.org/script/history lesen. php . Es scheint, dass Imagemagick fortgesetzt eher extensiv entwickelt werden, während GraphicsMagick seit der Gabel mehr oder weniger stagniert.