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?

War es hilfreich?

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:

 image description hier


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

 image description hier

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

 image description hier

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

 image description hier

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:

 image description hier


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

 image description hier


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 .

 image description 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 .

 image description 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top