سؤال

هذا هو حقا سؤال جزءين، لأنني لا أفهم تماما كيف تعمل هذه الأشياء بعد فقط:

وضعي: أنا أكتب تطبيقا ويب يتيح للمستخدم تحميل صورة. يقوم تطبيقي بتغيير حجمه لعرضه (على سبيل المثال: 640x480-ISH) ويوفر الملف لاستخدامه لاحقا.

أسئلتي:

  1. بالنظر إلى ملف JPEG التعسفي، هل من الممكن معرفة مستوى الجودة، حتى أتمكن من استخدام نفس الجودة عند حفظ الصورة المعلنة؟
  2. هل هذا يهم؟ يجب أن أقوم بحفظ جميع الصور على مستوى لائق (على سبيل المثال: 75-80)، بغض النظر عن الجودة الأصلية؟

لست متأكدا من ذلك لأنني، كما أعرف ذلك: (دعنا نأخذ مثالا متطرفا)، إذا كان لدى شخص ما صورة 5 ميجابكسل محفوظة في الجودة 0، فستكون حظية كأي شيء. تقليل حجم الصورة إلى 640 × 480، سيتم تنعيمها بالكاد أقل ملحوظة ... حتى أنقذته بجودة 0 مرة أخرى ...

في الطرف الآخر من الطيف، إذا كانت هناك صورة كانت 800 × 600 مع q = 0، فإن تغيير الحجم إلى 640 × 480 لن يغير حقيقة أنه يبدو وكأنه حماقة مطلقة، لذا فإن الحفظ مع Q = 80 سيكون زائدة عن الحاجة.

هل أنا قريب؟

أنا أستخدم مكتبة GD2 على PHP إذا كان ذلك من أي استخدام

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

المحلول

  1. JPEG هو شكل ضياع. في كل مرة تقوم فيها بحفظ صورة JPEG نفسها، بغض النظر عن مستوى الجودة، سوف تقلل من جودة الصورة الفعلية. لذلك حتى لو حصلت على مستوى جودة من الملف، لا يمكنك الحفاظ على نفس الجودة عند حفظ JPEG مرة أخرى (حتى في الجودة = 100).

  2. يجب عليك حفظ JPEG بجودة عالية حيث يمكنك تحمل تكلفة حجم الملف. أو استخدام تنسيق أقل من الخسارة مثل PNG.

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

بحسب ال jfif المواصفات. لا يتم تخزين رقم الجودة (0-100) في رأس الصورة، على الرغم من تخزين كثافة البكسل الأفقي والرأسي.

نصائح أخرى

يمكنك عرض مستوى ضغط بواسطة ImageMagick. يمكن العثور على تعليمات التركيب والتركيب في الموقع الرسمي.

بعد تثبيته، قم بتشغيل الأمر التالي من سطر الأوامر:

identify -format '%Q' yourimage.jpg

ويجب أن تحصل على القيمة من 0 (جودة منخفضة، ملفات صغيرة) إلى 100 (جودة عالية، ملفات كبيرة الحجم).

مصدر المعلومات

للزوار في المستقبل، والتحقق من جودة JPEG المعطاة، يمكنك فقط استخدام أدوات ImageMagick:

$> identify -format '%Q' filename.jpg
   92%

تحتوي خوارزمية ضغط JPEG على بعض المعلمات التي تؤثر على جودة الصورة النتيجة.

واحدة من هذه المعلمات هي جداول قياسية تحدد عدد البتات التي سيتم استخدامها في كل معامل. تستخدم برامج مختلفة جداول إذن مختلفة.

تسمح بعض البرامج للمستخدم بتعيين مستوى الجودة 0-100. ولكن لا يوجد دفاع شائع لهذا الرقم. تأخذ الصورة المصنوعة من Photoshop مع جودة 60٪ من 46 كيلو بايت، بينما تستغرق الصورة المصنوعة من GIMP 26 كيلو بايت فقط.

الجداول الكمي مختلفة أيضا.

هناك معلمات أخرى مثل هذه الأسلوب Subsampling و DCT وغيرها.

لذلك لا يمكنك وصف كل منهم برقم مستوى جودة واحدة ولا يمكنك مقارنة جودة الصور JPEG بواسطة رقم واحد. ولكن يمكنك إنشاء هذا الرقم مثل Photoshop أو Gimp الذي يصف المستوطان بين الحجم على الجودة.

معلومات اكثر:http://patrakov.blogspot.com/2008/12/jpeg-quality-is-meaningless-number.html.

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

كما يوجد بالفعل إجابة باستخدام identify, ، وهنا واحد أيضا إخراج اسم الملف (لمسح ملفات متعددة في وقت واحد):

إذا كنت ترغب في الحصول على إخراج بسيط من filename: quality للاستخدام على صور متعددة، يمكنك استخدام

identify -format '%f: %Q' *

ل إظهار اسم الملف + ضغط من جميع الملفات داخل الدليل الحالي.

لذلك، هناك أساسا حالتان تهتم به:

  1. إذا كانت الصورة الواردة تحتوي على جودة عالية للغاية، فقد يستغرق الأمر كمية غير لائقة من المساحة. لذلك، قد ترغب في ذلك، على سبيل المثال، للحد من Q = 99 إلى Q = 85.

  2. إذا كانت الصورة الواردة تحتوي على جودة مجموعة منخفضة للغاية، فقد تكون مضيعة للمساحة لرفع جودةها. باستثناء تلك الصورة التي لديها كمية كبيرة من البيانات التي تم تجاهلها لن تولي بطريقة سحرية مساحة أكبر عند رفع الجودة - سيتم ضغط الصور المقابلة بشكل جيد للغاية حتى في إعدادات عالية الجودة. لذلك، في رأيي، من الجيد تماما رفع Q = 1 إلى Q = 85.

من هذا، أعتقد أن إجبار إعداد جودة لائق هو شيء مقبول تماما للقيام به.

فيما يلي صيغة وجدت للعمل بشكل جيد:

  1. JPG100Size (الحجم الذي يجب ألا يتجاوزه البايتات بجودة 98-100٪) = العرض * الارتفاع / 1.7

  2. jpgxsize = jpg100size * x (x = في المئة، على سبيل المثال 0.65)

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

سيؤدي كل حفظ جديد من الملف إلى تقليل الجودة الشاملة، باستخدام قيم عالية الجودة، ستحافظ على المزيد من الصورة. بغض النظر عن ما كانت جودة الصورة الأصلية.

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

قد يكون هذا سؤالا سخيفا، ولكن لماذا تشعر بالقلق إزاء تعبير الدقيقة جودة المستند؟ أعتقد أنه إذا كنت تستخدم ImageMagick للقيام بالتحويل، فسوف يدير جودة JPEG لك للحصول على أفضل تأثير. http://www.php.net/manual/en/intro.imagick.php.

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