الانتقال إلى المحتوى
الصور والوسائط

أوقف ووردبريس عن ضغط صورك عند جودة 82%

يعيد ووردبريس ترميز كل صورة JPEG يولّدها بجودة 82 على مقياس من 0 إلى 100. هذا الإعداد الافتراضي موجود في WP_Image_Editor::get_default_quality() وينطبق على

نُشر

يعيد ووردبريس ترميز كل صورة JPEG يولّدها بجودة 82 على مقياس من 0 إلى 100. هذا الإعداد الافتراضي موجود في WP_Image_Editor::get_default_quality() وينطبق على كل نسخة مشتقة يقصّها ووردبريس من صورتك المرفوعة — thumbnail وmedium وmedium_large وlarge وكل حجم إضافي يسجّله قالبك. بالنسبة للصور الفوتوغرافية، تُعدّ 82 مقايضة معقولة بين حجم الملف والتشوهات. أما للقطات الشاشة وواجهات المستخدم والرسوم البيانية والشعارات وأي شيء يحتوي على نص حاد أو لون مسطّح، فإن 82 مدمّرة بشكل ظاهر للعين: تحصل على ضوضاء متطايرة تحوم حول كل حرف وتموّجات لونية عبر التدرجات الناعمة.

لتغييرها، أضف مرشّحًا (filter) واحدًا وأعد توليد صورك المصغرة. ولإصلاح لقطات الشاشة تحديدًا، فالحل الأفضل عادةً هو التوقف عن تسليم ووردبريس صورة JPEG من الأساس.

من أين يأتي الرقم 82 فعليًا

خفّض ووردبريس الجودة الافتراضية لصور JPEG من 90 إلى 82 في الإصدار 4.5 (عام 2016) كتحسين لوزن الصفحة. القيمة تُرجَع بواسطة get_default_quality() في wp-includes/class-wp-image-editor.php وتُقرأ كلما كتب المحرّر النشط ملفًا معاد التحجيم — سواء كان WP_Image_Editor_Imagick إذا كان مضيفك يدعم Imagick، أو WP_Image_Editor_GD بخلاف ذلك.

التفصيلة المهمة: يُطبَّق الرقم 82 على كل حجم مشتق، وليس مرة واحدة. ارفع صورة واحدة، وسيمرّرها ووردبريس عبر أداة الترميز عدة مرات، معيدًا التكميم (re-quantizing) بجودة 82 في كل تمريرة. أما الملف الأصلي المرفوع نفسه فيُترك دون مساس إذا كان أصغر من عتبة الصورة الكبيرة (2560 بكسل على الحافة الأطول). فإن تجاوز تلك العتبة، أنتج ووردبريس ملف -scaled.jpg معاد الترميز بجودة 82 وقدّم ذلك كحجم “full”. لذا فإن عبارة “صورتي بدقة كاملة تبدو ممتازة لكن النسخة الظاهرة على الصفحة تبدو ملطّخة” تعني غالبًا أن الـ srcset يختار حجمًا فرعيًا بجودة 82 أو ملف -scaled.

كيفية تغيير الجودة

هناك مرشّح واحد للربط به. المرشّح wp_editor_set_quality هو الحديث والمعتمد — يعمل مع JPEG وWebP ويستقبل نوع الـ MIME حتى تتمكن من التفريع:

add_filter( 'wp_editor_set_quality', function ( $quality, $mime_type ) {
    if ( 'image/jpeg' === $mime_type ) {
        return 92; // up from 82
    }
    return $quality;
}, 10, 2 );

ضع هذا في mu-plugin صغيرة (wp-content/mu-plugins/) أو في إضافة خاصة بالموقع. الملف functions.php يعمل أيضًا، لكنك تفقد الإعداد لحظة تبديل القالب.

سترى أيضًا توصيات باستخدام المرشّح الأقدم jpeg_quality. ما زال يعمل (يطبّقه ووردبريس مباشرة بعد wp_editor_set_quality، لصور JPEG فقط)، لكن لا داعي للربط بكليهما — فالمرشّح wp_editor_set_quality يغطي كل ما كان يفعله القديم وأكثر.

شيء ينساه الجميع: هذا المرشّح يؤثّر فقط على الصور المُرمّزة بعد تفعيله. كل صورة مصغرة موجودة أصلًا في wp-content/uploads كُتبت بجودة 82 وستبقى عند 82. أعد توليدها:

wp media regenerate --yes

إن لم تكن تستخدم WP-CLI، فإن إضافة Regenerate Thumbnails تقوم بالأمر نفسه عبر لوحة التحكم.

قبل أن تلتزم برقم معيّن، من المفيد أن ترى ما تفعله جودة معينة فعليًا بـ صورتك أنت بدلًا من التخمين. تعيد أداة جودة JPEG لووردبريس ترميز عيّنة داخل المتصفح عند كل مستوى جودة حتى تشاهد التشوهات تظهر — إنها توضّح الفرق بين 82 و90 و100 على لقطة شاشة بشكل لن يفعله أبدًا رقمٌ مكتوب في ملف إعدادات.

الحل الأفضل للقطات الشاشة والرسوم المسطّحة

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

ارفع صورة PNG بدلًا من ذلك. يُبقي ووردبريس الأحجام الفرعية لصور PNG بصيغة PNG، وصيغة PNG بلا فقدان (lossless) — لا يمسّها مرشّح الجودة، فلا توجد تشوهات في أي حجم، بل إعادة معاينة نظيفة فقط. بالنسبة للقطة شاشة، غالبًا ما تكون صورة PNG محسّنة جيدًا أصغر من صورة JPEG عالية الجودة للصورة نفسها، لأن اللون المسطّح يُضغط جيدًا في PNG وبشكل سيئ في JPEG.

إن أردت الملفات الأصغر لصيغة ذات فقدان دون ضرر الحواف الذي يسببه JPEG، فإن WebP هو الحل الوسط — لكنك ما زلت تتحكم في جودتها عبر مرشّح wp_editor_set_quality نفسه المعروض أعلاه، مع التفريع على image/webp.

ما لا ينبغي فعله

لا تضبط الجودة على 100 بشكل عام. هذا هو الجواب الأعلى تصويتًا في نصف مواضيع المنتديات، وهو خاطئ. جودة 100 لصور JPEG ليست بلا فقدان — فهي لا تزال تكمّم — لكنها تضخّم كل صورة فوتوغرافية على موقعك بهامش كبير دون أي مكسب مرئي، مما يُضعف LCP ومؤشرات Core Web Vitals. ارفع الرقم للصيغة التي تحتاجه، أو غيّر الصيغة للرسوم؛ لا تُلغِ الضغط على مستوى الموقع كله.

لا تعدّل class-wp-image-editor.php. تغيير القيمة المُرجَعة من get_default_quality() في النواة يعمل حتى يقوم wp core update التالي بالكتابة فوقه بصمت. استخدم المرشّح.

لا تعطّل أحجام الصور بحجة “تجنّب الضغط”. إيقاف توليد الصور المصغرة لا يوقف إعادة الترميز — بل يكسر الـ srcset المتجاوب، فتحمّل المتصفحات صورتك بالحجم الكامل على الهواتف. مشكلة مختلفة، ونتيجة أسوأ.

لا تفترض أن إعادة الرفع تصلح الصور الموجودة. إن ضبطت المرشّح لكنك تخطّيت خطوة إعادة التوليد، فكل نسخة مشتقة قديمة ما زالت بجودة 82. المرشّح يعمل للأمام فقط.

لا تلُم ملف -scaled إن كانت صورك أصغر من 2560 بكسل — فذلك المسار لا يعمل معها أبدًا. إن كنت تواجهه فعلًا وتريد تقديم الأصل دون مساس، فذلك إعداد منفصل؛ راجع تعطيل الصور المُحجَّمة (scaled).

ما زلت عالقًا؟

إن ظل حجم معيّن يبدو خاطئًا بعد إعادة التوليد، فتأكّد من الملف الذي تقدّمه الصفحة فعليًا — افتح الصورة في تبويب جديد وتحقّق مما إذا كان اسم الملف ينتهي بلاحقة أبعاد (-1024x768.jpg) أو بـ -scaled.jpg. يعرض مفتّش أحجام الصور كل نسخة مشتقة يولّدها ووردبريس من رفعة واحدة، حتى ترى بالضبط أي حجم يسلّمه الـ srcset إلى المتصفح وتتوقف عن تصحيح الملف الخطأ.