Question

Je me suis trouvé évaluer ces deux libs. En dehors de ce que la comparaison GraphicsMagick dit, je vois que ImageMagick encore eu des mises à jour et il semble que les deux sont presque identiques.

Je cherche simplement à faire la manipulation d'images de base en C ++ (à savoir la charge d'image, filtres, affichage); sont-il des différences que je devrais être au courant au moment de choisir entre ces bibliothèques?

Était-ce utile?

La solution

D'après ce que j'ai lu GraphicsMagick est plus stable et plus rapide. Je l'ai fait quelques tests non scientifiques et a trouvé g deux fois plus vite que im (faire un redimensionnement).

Autres conseils

J'ai trouvé ImageMagick être incroyablement lent pour le traitement de groupe 4 TIFF images (images de document B & W), principalement en raison du fait qu'il convertit de 1 bit par pixel à 8 et à nouveau faire toute manipulation d'image. Le groupe GraphicsMagick refondu le support du format TIFF avec leur version 1.2, et il est beaucoup plus rapide au traitement de ces types d'images que l'était ImageMagick d'origine. La version stable actuelle est GraphicsMagick à 1.3.5.

J'utilise ImageMagick lorsque la vitesse est pas un facteur. Cependant du côté du serveur, où des dizaines de milliers d'images sont en cours de traitement par jour, GraphicsMagick est assez nettement plus rapide - dans certains cas, jusqu'à 50% plus rapide des repères

Comme beaucoup de choses dans la vie, différentes personnes ont des idées différentes sur ce qui est le mieux. Si vous demandez à un photographe de paysage qui erre sous la pluie dans les montagnes d'Ecosse qui est la meilleure caméra dans le monde, il va vous dire un léger, un appareil photo étanche aux intempéries. Demandez à un photographe de studio, et il vous dira une plus haute résolution avec la meilleure vitesse de synchronisation du flash. Et si vous demandez à un photographe de sport, il va vous dire celui qui a le plus rapide mise au point automatique et taux le plus élevé d'images. Il est donc avec ImageMagick et GraphicsMagick.

Après avoir répondu au cours des 5+ dernières années, je fais environ 2.000 de questions sur ImageMagick les observations suivantes ...

En termes de popularité ...

  • ImageMagick des questions sur des questions plus nombreux que SO GraphicsMagick par un facteur de 12: 1 (7,375 Questions vs 611 à mai 2019) et
  • disciples ImageMagick sur SO plus nombreux adeptes GraphicsMagick de 15: 1 ((387 adeptes contre 25 à mai 2019)

En termes de performance ...

Je suis heureux de reconnaître que GraphicsMagick peut être plus rapide pour certains, mais pas tous les problèmes. Cependant, si la vitesse est votre plus importante considération, je pense que vous devriez probablement en utilisant soit libvips, ou un code parallèle sur les processeurs multi-core d'aujourd'hui ou les bibliothèques fortement SIMD optimisé (ou GPU optimisé) comme OpenCV.

En termes de fonctionnalités et de flexibilité ...

Il y a un gagnant très clair - ImageMagick. Mon expérience est qu'il ya de nombreuses fonctionnalités manquantes de GraphicsMagick qui sont présents dans ImageMagick et je liste certains de ces ci-dessous, sans ordre particulier.

Je reconnais volontiers que je ne suis pas aussi familier avec GraphicsMagick que je suis avec ImageMagick, mais je fait de mon mieux un grand effort pour trouver mention des caractéristiques dans le dernier code source GraphicsMagick. Ainsi, pour détecteur Canny Edge, j'ai couru la commande suivante sur le code source GM:

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

et n'a rien trouvé.


Canny détecteur Edge

Cela semble être complètement absent dans GM. Voir en IM -canny radiusxsigma{+lower-percent}{+upper-percent}.

Voir par exemple et échantillon de bord sur la détection l'image Lena:

 ici


Parenthesised traitement, re-séquençage sophistiqué

Ceci est une caractéristique de tueur de ImageMagick qui me manque souvent cruellement quand avoir à utiliser GM. IM peut charger ou créer ou cloner une série d'images et d'appliquer un traitement différent de manière sélective à des images spécifiques et re-séquence, dupliquer et de les réordonner très simple et pratique. Il est difficile de donner la flexibilité incroyable que cela vous donne une réponse courte.

Imaginez que vous voulez faire quelque chose assez simple comme l'image de charge A et la rendre floue, l'image charge B et de le rendre, puis placez échelle de gris côte à côte les images avec l'image B sur la gauche. Cela ressemble à cela avec ImageMagick:

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

 ici

Vous ne pouvez même commencer avec GM, il se plaindra des parenthèses. Si vous les supprimez, il se plaindra de la permutation de l'ordre d'image. Si vous supprimez qu'il appliquera la conversion aux deux images en niveaux de gris, car il ne comprend pas entre parenthèses et placez imageA à gauche.

Voir les commandes de séquençage suivantes en IM:

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

fx image DIY Opérateur de traitement

IM

a l'opérateur qui vous permet -fx de créer et d'expérimenter le traitement d'image incroyablement sophistiqué. Vous pouvez avoir une fonction évaluée pour chaque pixeldans une image. La fonction peut être aussi compliquée que vous le souhaitez (l'enregistrer dans un fichier si vous voulez) et d'utiliser toutes les opérations mathématiques, les déclarations de style ternaire, les références à if pixels, même dans d'autres images et leur luminosité ou la saturation et ainsi de suite.

Voici quelques exemples:

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

 ici

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

 ici

Une réponse StackOverflow qui utilise cette fonction pour un grand effet dans le traitement de l'écran vert images (calée chroma-est) .


Fourier (domaine fréquentiel) Analyse

Il semble y avoir aucune mention de marche avant ou arrière analyse de Fourier dans GM, ni le soutien High Dynamic Range (voir plus loin) qui est généralement nécessaire pour le soutenir. Voir en IM -fft.


Connected Analyse des composants / étiquetage / Blob Analyse

Il ne semble pas "Connected Analyse des" GM - également connu sous le nom "étiquetage" et "Analyse Blob" . Voir 4 et pour -connected-components connectivity 8 connectés analyse blob.

Cette seule fonction a fourni des réponses 60+ - voir

.

Hough Détection ligne

Il semble pas de détection de ligne Hough dans GM. Voir en IM -hough-lines widthxheight{+threshold}.

Voir la description de la fonction et exemple suivant, lignes détectées:

 ici


Moments et Perceptual Hash (phash)

Il semble y avoir aucun soutien pour le calcul des moments d'image (centroïdes et ordres supérieurs), ni Hashage perceptive dans GM. Voir en IM -moments.


Morphology

Il semble y avoir aucun soutien pour le traitement Morphologique dans GM. Dans IM, il est un support sophistiqué pour:

  • dilatation
  • érosion
  • ouverture et de fermeture morphologique
  • skeletonisation
  • morphologie distance
  • chapeau haut et la morphologie du chapeau bas
  • Hit and miss morphologie - ligne se termine, les jonctions de lignes, des pics, des crêtes, enveloppes convexes etc

Voir tout le traitement sophistiqué, vous pouvez le faire avec ce grand tutoriel.


contraste limité Adaptive égalisation d'histogramme - CLAHE

Il semble y avoir aucun support pour le contraste limité Adaptive Histogramme péréquation GM. Voir en IM -clahe widthxheight{%}{+}number-bins{+}clip-limit{!}.


HDRI - High Dynamic Range Imaging

Il semble y avoir aucun support pour High Dynamic Range Imaging dans GM -. Seulement 8, 16 et types entiers 32 bits


Convolution

ImageMagick supporte de nombreux types de convolution:

  • Différence gaussienne DoG
  • Laplacien
  • Sobel
  • Compass
  • Prewitt
  • Roberts
  • Frei-Chen

Aucun de ceux-ci sont mentionnés dans le code source GM.


Magick registre persistant (MPR)

Ceci est un caractéristique présente une valeur inestimable dans ImageMagick qui vous permet d'écrire les résultats intermédiaires de traitement à des morceaux de mémoire nommés au cours du traitement sans les frais généraux d'écriture sur le disque. Par exemple, vous pouvez préparer une texture ou un motif, puis la tuile elle sur une image, ou préparer un masque, puis le modifier et l'appliquer plus tard dans le même traitement sans aller sur le disque.

Voici un exemple:

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


plus large soutien colourspace

IM prend en charge les colourspaces suivants ne se trouvent pas dans GM:

  • CIELab
  • HCL
  • HSI
  • LMS
  • autres.

Support de Pango

IM soutient Pango Text Markup Language qui est similaire à HTML et vous permet d'annoter les images avec le texte qui change:

  • police, la couleur, la taille, le poids, italique
  • indice, indice supérieur, biffé
  • Justification

milieu d'une phrase et beaucoup, beaucoup plus. Il est un excellent exemple .

 ici


Réduction de la taille sur la charge avec les formats JPEG

Cette fonction inestimable permet à la bibliothèque de réduire les images JPEG lorsqu'elles sont lues à partir du disque, de sorte que seuls les coefficients nécessaires sont lus, de sorte que le E / S est amoindrie, et la consommation mémoire est réduite au minimum. Il peut massivement améliorer les performances lorsque les images en bas-échelle.

Voir par exemple .


Taille JPEG maximale définie lors de l'écriture

IM soutient l'option très demandée pour spécifier un poids maximum du fichier lors de l'écriture des fichiers JPEG, par exemple -define jpeg:extent=400KB.


Polar coordinate Transforme

IM prend en charge la conversion entre les coordonnées cartésiennes et polaires, voir -distort polar et -distort depolar.


Statistiques et opérations sur les zones personnalisables

Avec son opérateur -statistic MxN, ImageMagick peut générer de nombreux types de statistiques utiles et les effets. Par exemple, vous pouvez définir chaque pixel dans une image au gradient (différence entre les plus brillants et les plus sombres) de son voisinage 5x3:

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

Ou vous pouvez définir chaque pixel à la médiane de son voisinage 1x200:

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

Voir l'exemple de l'application .

 ici


Séquences d'images

ImageMagick supporte des séquences d'images, donc si vous avez un ensemble d'images très bruitées tourné à haute sensibilité ISO, vous pouvez charger toute la séquence d'images et, par exemple, prendre la médiane ou la moyenne de toutes les images pour réduire le bruit. Voir l'opérateur -evaluate-sequence. Je ne veux pas dire la médiane dans un voisinage en une seule image, je veux dire en trouvant la médiane de toutes les images à chaque position de pixel.


Ce qui précède ne constitue pas une liste exhaustive par tous les moyens, ils ne sont que les premières choses qui viennent à l'esprit quand je pensais que sur les différences. Je ne mentionne même pas le soutien pour HEIC (format d'Apple pour les images iPhone), les formats High Dynamic Range de plus en plus courants tels que EXR, ou tout autre. En fait, si vous comparez les formats de fichiers pris en charge par les deux produits (et gm convert -list format magick identify -list format), vous constaterez que IM prend en charge les formats 261 et GM prend en charge 192.

Comme je l'ai dit, différentes personnes ont des opinions différentes. Choisissez celui que vous aimez et plaisir à l'utiliser.

Comme toujours, je suis redevable à Anthony Thyssen pour ses excellentes idées et discours sur ImageMagick https: // www .imagemagick.org / Utilisation / Merci aussi à Fred Weinhaus pour ses exemples.

Histoire

graphicsmagick a été fourchue de ImageMagick en 2002 en raison de conflits entre les développeurs fondateurs. Ainsi, ils partagent la même base de code.

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

Objectif

graphicsmagick

  • met l'accent sur simple, stable et plus claire codebase / architecture

ImageMagick

  • met l'accent sur le déploiement de nouvelles fonctionnalités, une extension plus large Toolbase

autre que la vitesse, ImageMagick ajoute un certain nombre d'outils de cli à coque terminale tandis que graphicsmagick est un seul outil que vous pouvez appeler.

conception de l'interface CLI

graphicsmagick

gm <command> <options> <file>

ImageMagick

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

AMHA, je préfère (en fait, utiliser uniquement) graphicsmagick (g) sur ImageMagick que celui-ci a plus de chances de choc de nom de l'outil, ce qui provoque beaucoup de problèmes à savoir pourquoi certains outils sont pas en cours d'exécution, en particulier lors des tâches d'automatisation côté serveur. en résumé graphicsmagick a beaucoup plus claire design.

imaginer un binaire appelé convertir dans un projet et est-il ImageMagick Convertissons ou votre propre outil roulé dans le projet qui sera appelé?

liste des outils ImageMagick (y compris la conversion, comparer, affichage): https: // imagemagick.org/script/command-line-tools.php

liste des commandes GraphicsMagick: http://www.graphicsmagick.org/utilities.html

Note:. Au v7 comme mentionné par Mark S, ImageMagick est maintenant distribué sous forme binaire unique et supportant également les commandes v6 âgées

Performance

un simple test de consommation de mémoire se trouve ici: https://coderwall.com/p/1l7h-a/imagemagick-bloat- graphicsmagick

Dépendances

GraphicsMagick dépend de 36 bibliothèques alors que ImageMagick demande 64. Ref: http: //www.graphicsmagick .org / 1.3 / FAQ.html

GraphicsMagick était une fourchette anticipée de ImageMagick. Vous pouvez lire sur l'histoire de Imagemagick et la fourche à GraphicsMagick https://imagemagick.org/script/history. php . Il semble que Imagemagick a continué à se développer assez longuement, tandis que GraphicsMagick est resté plus ou moins stagnant depuis la fourche.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top