سؤال

أحاول تقليل حجم ملف ملفات ملفات PNG و GIF بشكل برمجي. كجزء من هذا ، أحتاج إلى تقليل عدد الألوان في الصور. لا أريد تقليل جميع الصور إلى قيمة ألوان واحدة ، لذلك ما أفعله هو ؛ احصل على عدد الألوان الفريدة في الصورة ، ثم ؛ قسّم هذا الرقم على 2 لتقليل عدد الألوان بمقدار النصف.

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

أي مساعدة ستكون موضع ترحيب بامتنان ، شكرًا.

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

المحلول 3

المشكلة الأولى ، يمكن تجميع GraphicsMagick باستخدام مستويات كمية 8 بت أو 16 بت أو 32 بت. يتم تجميع الإصدار الخاص بي في 8 بت (الافتراضي) ، وهذا يعني أن عدد الألوان القصوى التي يمكن تعيينها إلى صورة ما هو 256 لونًا فريدًا (3*3*2 ، يتم إزالة 1 من البتات الزرقاء لأن العين البشرية يمكن "ر أراها بشكل صحيح). من الواضح ، يمكن لـ GraphicsMagick التعامل مع الصور بألوان أكثر من هذا ، ولكن عند تقليل الألوان ، يمكن أن تقل إلى 256 ألوانًا أو أقل. تسبب كمية بكسل أكبر في تشغيل GraphicsMagick ببطء أكثر وتتطلب المزيد من الذاكرة. على سبيل المثال ، يؤدي استخدام Quantums بنسبة ستة عشر بكسل إلى تشغيل GraphicsMagick بنسبة 15 ٪ إلى 50 ٪ (ويستغرق ضعف الذاكرة) مما كان عليه عندما تم بناؤه لدعم كمية بكسل ثمانية بت.

المشكلة الثانية ؛ معالجة الشفافية في صور PNG ، كنت أستخدم إصدارًا سابقًا من GraphicsMagick (1.1 على ما أظن) ، على أي حال ، عندما قمت بالترقية إلى 1.3 لم تعد هذه المشكلة موجودة والتي تخبرني أنها كانت خطأ في GraphicsMagick 1.1 التي تسببت في ذلك.

نصائح أخرى

إن تقليل عدد الألوان مفيد فقط إذا

  1. يمكن للصورة بعد ذلك استخدام لوحة بدلاً من تخزين اللون لكل بكسل
  2. حجم مؤشر لوحة أصغر من حجم اللون
  3. يدعم تنسيق الصورة حجم اللوحة

أعتقد أنه يمكنك فقط الحصول على 1 بت أو 4 بت أو 8 بت أو 2 ألوان أو 16 لونًا أو 256 لونًا في تلك التنسيقات. أعتقد أنه إذا طلبت المزيد ، فستتم اقتطاعك إلى 256. إذا طلبت أقل ، فهذا لا يستخدم اللوحة بأكملها.

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

ربما اختر 1 ، 4 ، 8 بت إذا كان قريبًا مما تريد و JPEG إذا كان لديه الكثير من الألوان.

أعتقد أن مرفق ImageMagick الذي تتبعه قد يكون القياس الكمي:

http://www.imagemagick.org/usage/quantize/

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