سؤال

لقد وجدت نفسي أقوم بتقييم كلا هذين libs.وبصرف النظر عما تقوله مقارنة GraphicsMagick، أرى أن ImageMagick لا يزال يحصل على تحديثات ويبدو أن الاثنين متطابقان تقريبًا.

أنا أتطلع فقط إلى إجراء معالجة أساسية للصور في لغة C++ (أي.تحميل الصور، المرشحات، العرض)؛هل هناك أي اختلافات يجب أن أكون على دراية بها عند الاختيار بين هذه المكتبات؟

هل كانت مفيدة؟

المحلول

ومن ما قرأت GraphicsMagick أكثر استقرارا وأسرع. لقد فعلت ذلك لزوجين من الاختبارات غير علمية وجدت جم ليكون ضعفي ايم (القيام بتغيير).

نصائح أخرى

ولقد وجدت يماغيماغيك أن تكون بطيئة بشكل لا يصدق لمعالجة TIFF جماعة 4 صور (B & W ثيقة الصور)، ويرجع ذلك أساسا إلى حقيقة أنه يحول من 1 بت لكل بكسل إلى 8 والعودة مرة أخرى للقيام بأي صورة التلاعب. فحصت المجموعة GraphicsMagick شكل دعم TIFF مع من الإصدار 1.2، وهو أسرع بكثير في معالجة هذه الأنواع من الصور من الأصل كان يماغيماغيك. وGraphicsMagick إصدارة مستقرة الحالي في 1.3.5.

ويمكنني استخدام يماغيماغيك عندما السرعة ليست عاملا. ولكن على الجانب الخادم، حيث قتل عشرات الآلاف من الصور ويتم معالجتها يوميا، GraphicsMagick بشكل ملحوظ جدا أسرع - في بعض الحالات تصل إلى 50٪ أسرع في المعايير

كما هو الحال مع أشياء كثيرة في الحياة، لدى الأشخاص المختلفين أفكار مختلفة حول ما هو الأفضل.إذا سألت مصور المناظر الطبيعية الذي يتجول تحت المطر في جبال اسكتلندا ما هي أفضل كاميرا في العالم، فسوف يخبرك بكاميرا خفيفة الوزن ومقاومة للعوامل الجوية.اسأل أحد مصوري الأستوديو، وسيخبرك بأعلى دقة مع أفضل سرعة لمزامنة الفلاش.وإذا سألت مصورًا رياضيًا، فسوف يخبرك بالمصور الذي يتمتع بأسرع ضبط تلقائي للصورة وأعلى معدل إطارات.وهذا هو الحال مع ImageMagick وGraphicsMagick.

بعد أن أجبت على حوالي 2000 سؤال حول StackOverflow على ImageMagick على مدار أكثر من 5 سنوات الماضية، أقدم الملاحظات التالية...

من حيث الشعبية...

  • يفوق عدد أسئلة ImageMagick على SO عدد أسئلة GraphicsMagick بعامل 12:1 (7375 سؤالًا مقابل 611 في مايو 2019)، و
  • يفوق عدد متابعي ImageMagick على SO عدد متابعي GraphicsMagick بنسبة 15:1 (387 متابعًا مقابل 25 في مايو 2019)

من حيث الأداء...

ويسعدني أن أعترف بأن GraphicsMagick قد يكون أسرع بالنسبة لبعض المشاكل، ولكن ليس جميعها.ومع ذلك، إذا كانت السرعة هي الاعتبار الأكثر أهمية لديك، فأعتقد أنك ربما يجب أن تستخدم أيًا منهما libvips, ، أو تعليمات برمجية متوازية على وحدات المعالجة المركزية متعددة النواة الموجودة اليوم أو المكتبات المُحسّنة بشكل كبير لـ SIMD (أو المُحسّنة لوحدة معالجة الرسومات) مثل OpenCV.

من حيث المميزات والمرونة..

هناك فائز واحد واضح جدًا هنا - ImageMagick.تجربتي هي أن هناك العديد من الميزات المفقودة من GraphicsMagick والتي توجد في ImageMagick وأدرجت بعضًا منها أدناه، بدون ترتيب معين.

أعترف بحرية أنني لست على دراية بـ GraphicsMagick كما هو الحال مع ImageMagick، لكنني بذلت قصارى جهدي للعثور على أي ذكر للميزات الموجودة في أحدث كود مصدر GraphicsMagick.لذلك، بالنسبة لـ Canny Edge Detector، قمت بتشغيل الأمر التالي على الكود المصدري لـ GM:

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

ولم تجد شيئا.


كاشف الحواف كاني

يبدو أن هذا مفقود تمامًا في GM.يرى -canny radiusxsigma{+lower-percent}{+upper-percent} في المراسلة الفورية.

انظر المثال هنا وعينة من كشف الحواف على صورة لينا:

enter image description here


معالجة بين قوسين، وإعادة تسلسل متطورة

هذه ميزة قاتلة في ImageMagick والتي كثيرًا ما أفتقدها بشدة عندما أضطر إلى استخدام GM.يمكن للمراسلة الفورية تحميل أو إنشاء أو استنساخ سلسلة كاملة من الصور وتطبيق معالجة مختلفة بشكل انتقائي على صور معينة وإعادة تسلسلها وتكرارها وإعادة ترتيبها بكل بساطة وسهولة.من الصعب التعبير عن المرونة المذهلة التي يوفرها لك هذا في إجابة قصيرة.

تخيل أنك تريد القيام بشيء بسيط إلى حد ما مثل تحميل الصورة A وطمسها، وتحميل الصورة B وجعلها ذات تدرج رمادي ثم وضع الصور جنبًا إلى جنب مع الصورة B على اليسار.يبدو الأمر هكذا مع ImageMagick:

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

enter image description here

لا يمكنك حتى البدء مع GM، وسوف تشكو من الأقواس.إذا قمت بإزالتها، فسوف يشكو من تبديل ترتيب الصور.إذا قمت بإزالة ذلك فسيتم تطبيق تحويل التدرج الرمادي على كلتا الصورتين لأنه لا يفهم الأقواس ويضع الصورة A على اليسار.

راجع أوامر التسلسل التالية في المراسلة الفورية:

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

مشغل معالجة الصور DIY

IM لديه -fx المشغل الذي يسمح لك بإنشاء وتجربة معالجة صور متطورة بشكل لا يصدق.يمكنك تقييم الوظيفة لكل بكسل في الصورة.يمكن أن تكون الوظيفة معقدة كما تريد (احفظها في ملف إذا كنت تريد ذلك) واستخدم جميع العمليات الرياضية، على النمط الثلاثي if البيانات، الإشارات إلى وحدات البكسل حتى في الصور الأخرى وسطوعها أو تشبعها وما إلى ذلك.

هنا بضعة أمثلة:

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

enter image description here

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

enter image description here

إجابة StackOverflow التي تستخدم هذه الميزة لإحداث تأثير كبير في معالجة صور الشاشة الخضراء (ذات المفاتيح اللونية) هي هنا.


تحليل فورييه (مجال التردد).

يبدو أنه لا يوجد أي ذكر لتحليل فورييه الأمامي أو العكسي في جنرال موتورز، ولا دعم النطاق الديناميكي العالي (انظر لاحقًا) المطلوب عادةً لدعمه.يرى -fft في المراسلة الفورية.


تحليل المكونات المتصلة / وضع العلامات / تحليل النقطة

يبدو أنه لا يوجد "تحليل المكونات المتصلة" في جنرال موتورز - المعروف أيضًا باسم "وضع العلامات" و "تحليل النقطة".يرى -connected-components connectivity لتحليل النقطة المتصلة 4 و 8.

قدمت هذه الميزة وحدها أكثر من 60 إجابة - انظر هنا.


كشف خط هوغ

يبدو أنه لا يوجد أي اكتشاف لخط هوغ في جنرال موتورز.يرى -hough-lines widthxheight{+threshold} في المراسلة الفورية.

انظر وصف الميزة هنا والمثال التالي للخطوط المكتشفة:

enter image description here


اللحظات والتجزئة الإدراكية (pHash)

يبدو أنه لا يوجد دعم لحساب لحظات الصورة (النقط الوسطى والأوامر العليا)، ولا التجزئة الإدراكية في GM.يرى -moments في المراسلة الفورية.


علم التشكل المورفولوجيا

يبدو أنه لا يوجد دعم للمعالجة المورفولوجية في جنرال موتورز.يوجد في المراسلة الفورية دعم متطور لما يلي:

  • تمدد
  • التعرية
  • الفتح والإغلاق المورفولوجي
  • هيكل عظمي
  • مورفولوجيا المسافة
  • القبعة العلوية والقبعة السفلية مورفولوجية
  • مورفولوجية الضرب والخطأ - نهايات الخطوط، وتقاطعات الخطوط، والقمم، والتلال، والهياكل المحدبة، وما إلى ذلك

شاهد كل العمليات المتطورة التي يمكنك القيام بها هذا البرنامج التعليمي العظيم.


معادلة الرسم البياني التكيفي المحدود على النقيض - CLAHE

يبدو أنه لا يوجد دعم لمعادلة الرسم البياني التكيفي المحدودة للتباين في GM.يرى -clahe widthxheight{%}{+}number-bins{+}clip-limit{!} في المراسلة الفورية.


HDRI - تصوير النطاق الديناميكي العالي

يبدو أنه لا يوجد دعم للتصوير ذو النطاق الديناميكي العالي في GM - فقط أنواع الأعداد الصحيحة 8 و16 و32 بت.


التفاف

يدعم ImageMagick العديد من أنواع الالتواء:

  • الفرق بين Gaussians DoG
  • لابلاس
  • سوبيل
  • بوصلة
  • بريويت
  • روبرتس
  • فري تشن

لم يتم ذكر أي من هذه الأشياء في كود مصدر GM.


التسجيل المستمر Magick (MPR)

هذه ميزة لا تقدر بثمن موجودة في ImageMagick والتي تسمح لك بكتابة نتائج المعالجة المتوسطة إلى أجزاء محددة من الذاكرة أثناء المعالجة دون عبء الكتابة على القرص.على سبيل المثال، يمكنك تحضير مادة أو نقش ثم تجانبه فوق صورة، أو إعداد قناع ثم تعديله وتطبيقه لاحقًا في نفس المعالجة دون الانتقال إلى القرص.

هنا مثال:

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

enter image description here


دعم أوسع لمساحة الألوان

يدعم IM مساحات الألوان التالية غير الموجودة في GM:

  • CIELab
  • حمض الهيدروكلوريك
  • HSI
  • نظام إدارة التعلم
  • آحرون.

دعم بانجو

تدعم المراسلة الفورية لغة Pango Text Markup Language التي تشبه لغة HTML وتتيح لك إضافة تعليقات توضيحية إلى الصور باستخدام النص الذي يتغير:

  • الخط، اللون، الحجم، الوزن، المائل
  • منخفض، مرتفع، يتوسطه خط
  • مبرر

منتصف الجملة وأكثر من ذلك بكثير.هناك مثال عظيم هنا.

enter image description here


التقليص عند التحميل باستخدام JPEG

تتيح هذه الميزة التي لا تقدر بثمن للمكتبة تقليص صور JPEG أثناء قراءتها من القرص، بحيث تتم قراءة المعاملات الضرورية فقط، وبالتالي يتم تقليل الإدخال/الإخراج وتقليل استهلاك الذاكرة.يمكنه تحسين الأداء بشكل كبير عند تصغير حجم الصور.

انظر المثال هنا.


تم تحديد الحد الأقصى لحجم JPEG عند الكتابة

يدعم IM الخيار المطلوب بشدة لتحديد الحد الأقصى للحجم عند كتابة ملفات JPEG، -define jpeg:extent=400KB على سبيل المثال.


تحويل الإحداثيات القطبية

يدعم IM التحويل بين الإحداثيات الديكارتية والقطبية، انظر -distort polar و -distort depolar.


الإحصائيات والعمليات على المناطق القابلة للتخصيص

مع ل -statistic MxN يمكن لمشغل ImageMagick إنشاء العديد من أنواع الإحصائيات والتأثيرات المفيدة.على سبيل المثال، يمكنك ضبط كل بكسل في الصورة على التدرج (الفرق بين الأكثر سطوعًا والأغمق) لجواره 5x3:

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

أو يمكنك ضبط كل بكسل على متوسط ​​محيطه 1x200:

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

انظر مثال التطبيق هنا.

enter image description here


تسلسلات الصور

يدعم ImageMagick تسلسلات الصور، لذلك إذا كان لديك مجموعة من الصور المزعجة للغاية التي تم التقاطها بحساسية ISO عالية، فيمكنك تحميل تسلسل الصور بالكامل، وعلى سبيل المثال، أخذ المتوسط ​​أو المتوسط ​​لجميع الصور لتقليل الضوضاء.انظر -evaluate-sequence المشغل أو العامل.لا أقصد الوسيط في الحي المحيط في صورة واحدة، بل أعني إيجاد الوسيط لجميع الصور في كل موضع بكسل.


ما ورد أعلاه ليس قائمة شاملة بأي حال من الأحوال، فهي مجرد الأشياء القليلة الأولى التي تتبادر إلى ذهني عندما فكرت في الاختلافات.ولم أذكر حتى دعم HEIC (تنسيق Apple لصور iPhone)، أو تنسيقات النطاق الديناميكي العالي الشائعة بشكل متزايد مثل EXR، أو أي تنسيقات أخرى.في الواقع، إذا قمت بمقارنة تنسيقات الملفات التي يدعمها المنتجان (gm convert -list format و magick identify -list format) ستجد أن المراسلة الفورية تدعم 261 تنسيقًا بينما يدعم GM 192 تنسيقًا.

وكما قلت، فإن الأشخاص المختلفين لديهم آراء مختلفة.اختر الشخص الذي يعجبك واستمتع باستخدامه.

كما هو الحال دائمًا، أنا مدين لأنطوني تايسن لأفكاره وخطاباته الممتازة حول ImageMagick في https://www.imagemagick.org/Usage/ شكرًا أيضًا لفريد واينهاوس على الأمثلة التي قدمها.

تاريخ

تم تفرع برنامج graphicsmagick من imagemagick في عام 2002 بسبب الخلافات بين المطورين المؤسسين.وبالتالي فإنهم يتشاركون في نفس قاعدة التعليمات البرمجية.

المرجع : https://en.wikipedia.org/wiki/GraphicsMagick

هدف

graphicsmagick

  • يركز على قاعدة بيانات/بنية بسيطة ومستقرة وأكثر وضوحًا

imagemagick

  • يركز على طرح ميزات جديدة وتوسيع قاعدة أدوات أوسع

بخلاف السرعة، يضيف imagemagick عددًا من أدوات cli إلى غلاف الوحدة الطرفية، في حين أن graphicsmagick هي أداة واحدة يمكنك الاتصال بها.

تصميم واجهة CLI

graphicsmagick

gm <command> <options> <file>

imagemagick

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

إيمهو، أنا أفضل (في الواقع، استخدام فقط) graphicsmagick(gm) أفضل من imagemagick لأن الأخير لديه فرصة أكبر لتعارض اسم الأداة، مما يسبب الكثير من المشكلات في معرفة سبب عدم تشغيل بعض الأدوات، خاصة أثناء مهام التشغيل الآلي من جانب الخادم.في ملخص الرسومات، يتمتع السحر بتصميم أكثر وضوحًا.

تخيل ثنائيًا يسمى تحويل في مشروع ما، وهل هو تحويل imagemagick أم الأداة المدرفلة الخاصة بك في المشروع والتي سيتم استدعاؤها؟

قائمة أدوات imagemagick (بما في ذلك التحويل والمقارنة والعرض): https://imagemagick.org/script/command-line-tools.php

قائمة أوامر الرسومات السحرية :http://www.graphicsmagick.org/utilities.html

ملحوظة :اعتبارًا من الإصدار 7 كما ذكر Mark S، يتم الآن توزيع imagemagick كثنائي فردي، ويدعم أيضًا أوامر الإصدار 6 الأقدم.

أداء

يمكن العثور على اختبار بسيط لاستهلاك الذاكرة هنا:https://coderwall.com/p/1l7h-a/imagemagick-bloat-graphicsmagick

التبعيات

يعتمد GraphicsMagick على 36 مكتبة بينما يتطلب ImageMagick 64 مكتبة.المرجع : http://www.graphicsmagick.org/1.3/FAQ.html

وكان GraphicsMagick وشوكة في وقت مبكر من يماغيماغيك. يمكنك أن تقرأ عن تاريخ يماغيماغيك والشوكة إلى GraphicsMagick على https://imagemagick.org/script/history. فب . ويبدو أن يماغيماغيك استمر في تطويرها بدلا نطاق واسع، في حين ظلت GraphicsMagick أكثر أو أقل الراكدة منذ شوكة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top