مواد پر جائیں
امیجز اور میڈیا

WordPress کو اپنی تصاویر 82% پر کمپریس کرنے سے روکیں

WordPress ہر JPEG کو جو وہ بناتا ہے 0–100 اسکیل پر کوالٹی 82 پر دوبارہ انکوڈ کرتا ہے۔ یہ ڈیفالٹ WP_Image_Editor::get_default_quality() میں موجود ہے اور اس پر لاگو ہوتا ہے

شائع شدہ

WordPress ہر JPEG کو جو وہ بناتا ہے 0–100 اسکیل پر کوالٹی 82 پر دوبارہ انکوڈ کرتا ہے۔ یہ ڈیفالٹ WP_Image_Editor::get_default_quality() میں موجود ہے اور ہر اُس ڈیریویٹو پر لاگو ہوتا ہے جو WordPress آپ کی اپلوڈ سے کاٹتا ہے — thumbnail، medium، medium_large، large، اور ہر اضافی سائز جو آپ کی theme رجسٹر کرتی ہے۔ تصاویر (فوٹوگرافس) کے لیے 82 فائل سائز اور آرٹیفیکٹس کے درمیان ایک معقول توازن ہے۔ لیکن اسکرین شاٹس، UI کیپچرز، چارٹس، لوگوز، اور کسی بھی ایسی چیز کے لیے جس میں تیز ٹیکسٹ یا فلیٹ رنگ ہو، 82 نمایاں طور پر تباہ کن ہے: آپ کو ہر حرف کے گرد رینگتا ہوا “موسکیٹو نائز” اور ہموار گریڈیئنٹس پر بینڈنگ ملتی ہے۔

اسے تبدیل کرنے کے لیے، ایک filter شامل کریں اور اپنے thumbnails دوبارہ جنریٹ کریں۔ خاص طور پر اسکرین شاٹس کو ٹھیک کرنے کے لیے، بہتر جواب عام طور پر یہ ہے کہ WordPress کو شروع ہی سے JPEG نہ تھمایا جائے۔

82 کا نمبر دراصل کہاں سے آتا ہے

WordPress نے 4.5 (2016) میں اپنا JPEG ڈیفالٹ 90 سے کم کر کے 82 کر دیا تھا، بطور پیج ویٹ آپٹیمائزیشن۔ یہ ویلیو wp-includes/class-wp-image-editor.php میں get_default_quality() سے واپس آتی ہے اور جب بھی فعال ایڈیٹر — اگر آپ کے ہوسٹ پر Imagick موجود ہے تو WP_Image_Editor_Imagick، ورنہ WP_Image_Editor_GD — کوئی ری سائز کی گئی فائل لکھتا ہے تو یہ پڑھی جاتی ہے۔

اہم تفصیل: 82 فی ڈیریویٹو سائز لاگو ہوتا ہے، ایک بار نہیں۔ ایک تصویر اپلوڈ کریں، اور WordPress اسے انکوڈر کے ذریعے کئی بار چلاتا ہے، ہر بار کوالٹی 82 پر دوبارہ کوانٹائز کرتا ہے۔ اصل اپلوڈ کی گئی فائل خود چھوئی نہیں جاتی اگر وہ big-image تھریشولڈ (لمبے کنارے پر 2560px) سے کم ہو۔ اگر وہ اس تھریشولڈ سے تجاوز کر جائے، تو WordPress کوالٹی 82 پر ایک دوبارہ انکوڈ شدہ -scaled.jpg بناتا ہے اور اسی کو “full” سائز کے طور پر پیش کرتا ہے۔ چنانچہ “میری فل ریزولوشن تصویر تو ٹھیک لگتی ہے لیکن پیج پر موجود ورژن دھندلا لگتا ہے” تقریباً ہمیشہ اس بات کا نتیجہ ہوتا ہے کہ srcset کوئی کوالٹی-82 سب سائز یا -scaled فائل چن رہا ہے۔

کوالٹی کیسے تبدیل کریں

ہک کرنے کے لیے ایک filter ہے۔ wp_editor_set_quality جدید، مستند filter ہے — یہ JPEG اور WebP دونوں کے لیے فائر ہوتا ہے اور MIME type وصول کرتا ہے تاکہ آپ برانچ کر سکیں:

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/) یا سائٹ کے مخصوص plugin میں رکھیں۔ functions.php بھی کام کرتی ہے، لیکن جیسے ہی آپ theme بدلتے ہیں یہ سیٹنگ ختم ہو جاتی ہے۔

آپ کو پرانا jpeg_quality filter بھی تجویز کیا ہوا نظر آئے گا۔ یہ اب بھی فائر ہوتا ہے (WordPress اسے wp_editor_set_quality کے فوراً بعد لاگو کرتا ہے، صرف JPEG کے لیے)، لیکن دونوں کو ہک کرنے کی کوئی وجہ نہیں — wp_editor_set_quality وہ سب کچھ کور کرتا ہے جو پرانا کرتا تھا اور اس سے زیادہ بھی۔

ایک بات جو سب بھول جاتے ہیں: یہ filter صرف ان تصاویر پر اثر کرتا ہے جو اس کے فعال ہونے کے بعد انکوڈ ہوں۔ ہر وہ thumbnail جو پہلے سے wp-content/uploads میں پڑا ہے، 82 پر لکھا گیا تھا اور 82 پر ہی رہے گا۔ انہیں دوبارہ جنریٹ کریں:

wp media regenerate --yes

اگر آپ WP-CLI پر نہیں ہیں، تو Regenerate Thumbnails plugin ایڈمن کے ذریعے یہی کام کرتا ہے۔

کسی نمبر پر فیصلہ کرنے سے پہلے، اندازہ لگانے کے بجائے یہ دیکھ لینا مناسب ہے کہ ایک مخصوص کوالٹی دراصل آپ کی تصویر کے ساتھ کیا کرتی ہے۔ ہمارا WordPress JPEG quality tool براؤزر میں ہر کوالٹی لیول پر ایک نمونہ دوبارہ انکوڈ کرتا ہے تاکہ آپ آرٹیفیکٹس کو نمودار ہوتا دیکھ سکیں — یہ 82، 90، اور 100 کے درمیان فرق کو کسی اسکرین شاٹ پر اس طرح واضح کر دیتا ہے جو کسی کنفیگ فائل میں لکھا نمبر کبھی نہیں کر سکتا۔

اسکرین شاٹس اور فلیٹ گرافکس کے لیے بہتر حل

JPEG نمبر بڑھانا صرف علامت کا علاج ہے۔ اسکرین شاٹس کے ساتھ اصل مسئلہ یہ ہے کہ JPEG ان کے لیے غلط کوڈیک ہے۔ JPEG کی DCT کمپریشن فوٹوگرافک گریڈیئنٹس کے لیے ٹیون کی گئی ہے؛ یہ ٹیکسٹ اور UI کروم کے سخت سیاہ-پر-سفید کناروں پر بکھر جاتی ہے، اور یہی وجہ ہے کہ کوالٹی 82 کسی اسکرین شاٹ پر کسی فوٹو کے مقابلے میں کہیں زیادہ خراب لگتی ہے۔

اس کے بجائے ایک PNG اپلوڈ کریں۔ WordPress PNG سب سائزز کو PNG ہی رکھتا ہے، اور PNG لاس لیس ہے — کوالٹی filter اسے چھوتا تک نہیں، چنانچہ کسی بھی سائز پر کوئی آرٹیفیکٹس نہیں ہوتے، صرف صاف ری سیمپلنگ۔ کسی اسکرین شاٹ کے لیے، ایک اچھی طرح آپٹیمائز کی گئی PNG اکثر اسی تصویر کی ہائی کوالٹی JPEG سے چھوٹی ہوتی ہے، کیونکہ فلیٹ رنگ PNG میں اچھی طرح کمپریس ہوتا ہے اور JPEG میں بہت بری طرح۔

اگر آپ JPEG کے کنارے کے نقصان کے بغیر کسی lossy فارمیٹ کی چھوٹی فائلیں چاہتے ہیں، تو WebP درمیانی راستہ ہے — لیکن آپ اس کی کوالٹی کو بھی اسی wp_editor_set_quality filter کے ذریعے کنٹرول کرتے ہیں جو اوپر دکھایا گیا ہے، image/webp پر برانچ کر کے۔

کیا نہیں کرنا چاہیے

کوالٹی کو گلوبل طور پر 100 مت سیٹ کریں۔ یہ آدھے فورم تھریڈز پر سب سے زیادہ ووٹ پانے والا جواب ہے، اور یہ غلط ہے۔ کوالٹی 100 JPEG لاس لیس نہیں ہے — یہ پھر بھی کوانٹائز کرتا ہے — لیکن یہ آپ کی سائٹ کی ہر فوٹوگراف کو بغیر کسی نظر آنے والے فائدے کے بھاری مارجن سے پھلا دیتا ہے، جو LCP اور Core Web Vitals کو نیچے کھینچتا ہے۔ اُس فارمیٹ کے لیے نمبر بڑھائیں جسے اس کی ضرورت ہے، یا گرافکس کے لیے فارمیٹ بدلیں؛ پوری سائٹ پر کمپریشن کو تباہ مت کریں۔

class-wp-image-editor.php کو ایڈٹ مت کریں۔ کور میں get_default_quality() کی واپسی ویلیو تبدیل کرنا اگلے wp core update تک کام کرتا ہے، پھر وہ خاموشی سے اسے اوور رائٹ کر دیتا ہے۔ filter استعمال کریں۔

“کمپریشن سے بچنے” کے لیے image سائزز کو غیر فعال مت کریں۔ thumbnail جنریشن بند کرنا دوبارہ انکوڈنگ نہیں روکتا — یہ ریسپانسو srcset کو توڑ دیتا ہے، جس سے براؤزرز فون پر آپ کی فل سائز تصویر ڈاؤن لوڈ کرتے ہیں۔ مختلف مسئلہ، بدتر نتیجہ۔

یہ مت سمجھیں کہ دوبارہ اپلوڈ کرنے سے موجودہ تصاویر ٹھیک ہو جاتی ہیں۔ اگر آپ filter سیٹ کر دیں لیکن regenerate والا مرحلہ چھوڑ دیں، تو ہر پرانا ڈیریویٹو اب بھی کوالٹی 82 پر ہے۔ filter صرف آگے کی جانب کام کرتا ہے۔

اگر آپ کی تصاویر 2560px سے کم ہیں تو -scaled فائل کو مورد الزام مت ٹھہرائیں — وہ راستہ ان کے لیے کبھی چلتا ہی نہیں۔ اگر آپ واقعی اس تک پہنچ رہے ہیں اور چاہتے ہیں کہ اَن ٹچڈ اوریجنل پیش ہو، تو وہ ایک الگ سیٹنگ ہے؛ دیکھیں scaled images غیر فعال کرنا۔

اب بھی پھنسے ہوئے ہیں؟

اگر دوبارہ جنریٹ کرنے کے بعد بھی کوئی مخصوص سائز غلط لگتا ہے، تو تصدیق کریں کہ پیج دراصل کون سی فائل پیش کر رہا ہے — تصویر کو نئے ٹیب میں کھولیں اور دیکھیں کہ فائل نیم کسی ڈائمینشن سفکس (-1024x768.jpg) یا -scaled.jpg پر ختم ہوتا ہے یا نہیں۔ image sizes inspector ہر وہ ڈیریویٹو دکھاتا ہے جو WordPress ایک اپلوڈ سے جنریٹ کرتا ہے، تاکہ آپ ٹھیک ٹھیک دیکھ سکیں کہ آپ کا srcset براؤزر کو کون سا سائز تھما رہا ہے اور غلط فائل کو ڈیبگ کرنا بند کر دیں۔