सीधे कंटेंट पर जाएं
Images और media

WordPress की -scaled इमेज कैसे बंद करें (big_image_size_threshold)

big_image_size_threshold फ़िल्टर से 2560px की सीमा बढ़ाकर या हटाकर धुँधली WordPress इमेज ठीक कीजिए, और समझिए कि दोबारा अपलोड करना वही कदम है जिसे लोग छोड़ देते हैं।

Published

big_image_size_threshold पर एक फ़िल्टर जोड़िए जो false लौटाए, और WordPress अपलोड पर -scaled कॉपियाँ बनाना बंद कर देगा। इसकी जगह कोई नंबर लौटाइए तो सीमा हटेगी नहीं, बस बढ़ जाएगी। दोनों functions.php में या किसी छोटे mu-plugin में जाते हैं, और दोनों का असर सिर्फ़ उन अपलोड पर होता है जो फ़िल्टर चालू होने के बाद किए जाएँ।

// Disable the cap entirely — no -scaled copies at all.
add_filter( 'big_image_size_threshold', '__return_false' );
// Or just raise it. Longest edge, in pixels.
add_filter( 'big_image_size_threshold', function () {
    return 3840;
} );

WordPress असल में कर क्या रहा है

WordPress 5.3 के बाद से हर अपलोड की सबसे लंबी भुजा नापी जाती है। अगर वह भुजा big_image_size_threshold से बड़ी है — डिफ़ॉल्ट रूप से 2560px — तो WordPress इमेज को उसी सीमा तक घटाकर दोबारा encode करता है, उसे your-photo-scaled.jpg के रूप में सेव करता है, और attachment metadata इस तरह बदल देता है कि full साइज़ अब उसी scaled कॉपी की ओर इशारा करे।

आपकी मूल फ़ाइल डिलीट नहीं होती। वह डिस्क पर अपने मूल नाम से बनी रहती है, attachment metadata में दर्ज रहती है, और PHP में wp_get_original_image_path() से पहुँच में रहती है। लेकिन फ़्रंट एंड पर उसे कोई नहीं परोसता। न block editor, न srcset, न media library का प्रीव्यू। वह बस एक archive कॉपी बनकर पड़ी रहती है।

इसके आगे की हर चीज़ फिर आपके अपलोड से नहीं, उसी scaled फ़ाइल से बनती है:

साइज़किससे बनता है
full-scaled कॉपी
large, medium_large, medium, thumbnail-scaled कॉपी
add_image_size से बने कस्टम साइज़-scaled कॉपी
थीम और प्लगइन के साइज़, जैसे woocommerce_thumbnail-scaled कॉपी
srcset उम्मीदवार-scaled कॉपी

बस यही एक बात है जिस पर इतने लोग फँसते हैं।

“मेरी शार्प इमेज सॉफ़्ट क्यों दिख रही है” की आम वजह यही होती है

एक साथ दो चीज़ें होती हैं, और उनमें से सिर्फ़ एक सामने दिखती है।

सामने दिखने वाली चीज़ है resolution। आप full-width hero के लिए 4000px की फ़ोटो अपलोड करते हैं। WordPress ब्राउज़र को 2560px थमा देता है। 1600px के कंटेनर को भरते साधारण डिस्प्ले पर किसी को फ़र्क नहीं दिखता। लेकिन 2x retina स्क्रीन पर उसी कंटेनर को करीब 3200 असली पिक्सल चाहिए, मिलते हैं 2560, और ब्राउज़र बाकी की भरपाई खींचकर करता है। किनारे सॉफ़्ट, डिटेल गड्ड-मड्ड, और इमेज के भीतर का टेक्स्ट धुँधला।

कम दिखने वाली चीज़ है दोबारा encode होना। -scaled कॉपी आपकी फ़ाइल की lossless कटिंग नहीं है। WordPress आपके अपलोड को decode करता है, उसका आकार घटाता है, और अपनी JPEG quality सेटिंग पर उसे दोबारा compress करता है। अगर आपकी मूल फ़ाइल Lightroom या फ़ोन से निकली पहले से compressed JPEG थी, तो यह दूसरी पीढ़ी का encode है: compression artifacts के ऊपर और compression artifacts। बारीक डिटेल, film grain और सपाट gradients पर सबसे बुरी मार पड़ती है। यह तब भी दिख जाता है जब पिक्सल आकार पर्याप्त लग रहा हो।

कुछ भी बदलने से पहले इसकी पुष्टि कीजिए। इमेज को नए टैब में खोलिए और URL में फ़ाइल का नाम पढ़िए। -scaled.jpg का मतलब है सीमा लगी है। -1536x1024.jpg जैसा dimension वाला suffix कुछ और कहता है — srcset ने कोई बहुत छोटा बीच का साइज़ चुन लिया, और वहाँ threshold फ़िल्टर आपकी मदद नहीं करेगा।

सर्वर पर:

find wp-content/uploads -name '*-scaled.*' | wc -l

अगर यह संख्या बड़ी है, तो यह सीमा आपकी पूरी लाइब्रेरी को आकार देती रही है।

किसी सेटिंग पर टिकने से पहले आप disable scaled images tool में एक फ़ाइल डालकर भी देख सकते हैं कि दिया गया सोर्स threshold पार करेगा या नहीं, और scaled कॉपी किन आकारों पर बनेगी।

ईमानदार समझौता

ज़्यादातर लेख कहते हैं कि सीमा हटाने पर डिस्क स्पेस ज़्यादा लगेगी। बात उल्टी है, और इस पर सटीक होना ज़रूरी है।

प्रति इमेज डिस्क का इस्तेमाल थोड़ा घटता है। threshold चालू रहने पर WordPress आपकी मूल फ़ाइल और एक बड़ी scaled कॉपी, दोनों रखता है। बंद रहने पर सिर्फ़ मूल फ़ाइल बचती है। दो के बजाय एक फ़ाइल।

Bandwidth और पेज का वज़न बढ़ता है, कभी-कभी बहुत ज़्यादा। सीमा बंद होने पर full आपका बिना छेड़ा अपलोड होता है। जो कुछ भी full साइज़ से जुड़ता या उसे रेंडर करता है — lightbox, gallery प्लगइन, “view original” लिंक, या hero इमेज के लिए full माँगने वाली थीम — अब 900KB की जगह 6MB की फ़ाइल भेजता है। मोबाइल पर यह Largest Contentful Paint की असली समस्या है, और image CDN हमेशा नहीं बचाएँगे क्योंकि उनमें से कुछ एक तय आकार से ऊपर फ़ाइल को जस का तस पास कर देते हैं।

अपलोड के दौरान मेमोरी बढ़ती है। PHP में 6000px की इमेज का आकार बदलने में 2560px वाली से कहीं ज़्यादा मेमोरी लगती है। कम PHP मेमोरी वाली सस्ती shared hosting पर सीमा हटाना फेल अपलोड या आधे बने thumbnails शुरू कराने का पक्का तरीका बन सकता है। सीमा हटाने के बजाय उसे 3840 करना उसी बदलाव का सुरक्षित रूप है।

इसीलिए ज़्यादातर साइट्स के लिए समझदारी की बात नंबर बढ़ाना है, उसे हटाना नहीं। हटाना तब सही है जब आप ऐसी इमेज परोस रहे हों जिन्हें सचमुच पूरी resolution चाहिए: प्रिंट क्वालिटी गैलरी, प्रोडक्ट ज़ूम, आर्किटेक्चर फ़ोटोग्राफ़ी, या ऐसा कुछ भी जहाँ यूज़र से मूल फ़ाइल को गौर से देखने की उम्मीद हो।

बदलाव को ठीक से लागू करना

1. फ़िल्टर ऐसी जगह रखिए जहाँ वह टिका रहे। child theme का functions.php चलेगा। एक फ़ाइल वाला mu-plugin बेहतर है, क्योंकि थीम बदलने पर वह चुपचाप हट नहीं सकता।

<?php
/**
 * Plugin Name: Raise big image threshold
 */
add_filter( 'big_image_size_threshold', function () {
    return 3840;
} );

2. प्रभावित इमेज दोबारा अपलोड कीजिए। यही वह कदम है जिसे लोग छोड़ देते हैं और फिर मान लेते हैं कि फ़िल्टर काम नहीं करता। threshold सिर्फ़ एक बार, अपलोड के समय जाँचा जाता है। पहले से मौजूद attachments हमेशा अपना पुराना metadata पकड़े रहते हैं। attachment डिलीट कीजिए, उसे दोबारा अपलोड कीजिए, फिर अपनी पोस्ट्स में उसके references ठीक कर लीजिए।

3. thumbnail regeneration से किसी चमत्कार की उम्मीद मत रखिए। WP-CLI से wp media regenerate बीच के साइज़ उसी फ़ाइल से बनाता है जिसे metadata full कहता है — और पहले से सीमित इमेज के लिए वह -scaled कॉपी ही है। जो डिटेल फेंकी जा चुकी है वह वापस नहीं आ सकती। दोबारा अपलोड करने के बाद सफ़ाई के तौर पर यह उपयोगी है। अकेले फिक्स के तौर पर बेकार है।

4. नतीजा जाँचिए, मान मत लीजिए। दोबारा अपलोड करने के बाद इमेज को फ़्रंट एंड पर खोलिए और फ़ाइल का नाम फिर से पढ़िए। -scaled न दिखे तो फ़िल्टर चालू है।

जब बंद करना गलत कदम है

अगर आपकी सोर्स इमेज पहले से 2560px से छोटी हैं और फिर भी सॉफ़्ट दिखती हैं, तो threshold का इसमें कोई हाथ था ही नहीं। दिक्कत यह है कि डिस्प्ले बॉक्स उपलब्ध पिक्सल से बड़ा है, और जवाब है बड़ी सोर्स फ़ाइल या छोटा कंटेनर — यह फ़िल्टर नहीं।

अगर परोसे गए फ़ाइल नाम में -scaled की जगह dimension वाला suffix है, तो srcset ने एक छोटा उम्मीदवार चुना है। यह आम तौर पर आपकी थीम की घोषित content width और इमेज जिस बॉक्स में असल में रेंडर होती है, उसके बीच के मेल न खाने से होता है। सीमा बंद करने से इसमें कुछ नहीं बदलेगा।

और अगर कोई प्लगइन आपके src को किसी optimizer या CDN proxy की ओर मोड़ रहा है, तो जब तक आप यह न देख लें कि वह proxy क्या परोस रहा है, इनमें से कुछ भी लागू नहीं होता। WordPress को जो बनाना चाहिए और ब्राउज़र जो असल में लोड करता है, उनकी तुलना कीजिए; जब वे मेल न खाएँ, तो बीच में बैठी चीज़ को देखिए।

FAQ

सवाल

WordPress में scaled images कैसे बंद करें?

big_image_size_threshold पर एक फ़िल्टर जोड़िए जो false लौटाए। इसे functions.php में या एक छोटे mu-plugin में रखिए। false लौटाने से यह सीमा पूरी तरह हट जाती है, इसलिए अपलोड अपने मूल आकार में रहते हैं और कोई -scaled कॉपी नहीं बनती। इसकी जगह कोई नंबर, जैसे 3840, लौटाने पर सीमा हटती नहीं बल्कि बढ़ जाती है।

WordPress फ़ाइल नाम में -scaled का क्या मतलब है?

यह उस दोबारा encode की गई कॉपी की पहचान है जो WordPress ने इसलिए बनाई क्योंकि आपका अपलोड सबसे लंबी भुजा पर 2560px से बड़ा था। वही कॉपी आपकी पूरी साइट पर full साइज़ बन जाती है। आपकी मूल फ़ाइल डिस्क पर अपने सामान्य नाम से बनी रहती है, पर फ़्रंट एंड पर कुछ भी उससे नहीं जुड़ता, और हर thumbnail और srcset उम्मीदवार उसी scaled कॉपी से बनता है।

क्या scaled images बंद करने से डिस्क ज़्यादा भरती है?

प्रति इमेज आम तौर पर थोड़ी कम ही भरती है, क्योंकि WordPress आपकी मूल फ़ाइल के साथ दूसरी बड़ी फ़ाइल लिखना बंद कर देता है। असली कीमत स्टोरेज नहीं, bandwidth है। सीमा बंद होने पर full साइज़ से जुड़ी हर चीज़ आपका बिना छेड़ा हुआ अपलोड परोसती है, जो फ़ोन कनेक्शन पर कई मेगाबाइट का हो सकता है।

क्या threshold बंद करने से पहले से धुँधली इमेज ठीक हो जाएँगी?

नहीं। फ़िल्टर सिर्फ़ नए अपलोड पर असर करता है। लाइब्रेरी में पहले से मौजूद इमेज का metadata उनकी scaled कॉपी की ओर ही इशारा करता रहता है, और thumbnails दोबारा बनाने पर साइज़ उसी सीमित फ़ाइल से बनते हैं। resolution वापस पाने के लिए attachment डिलीट करके, फ़िल्टर चालू होने के बाद उसे दोबारा अपलोड करना पड़ता है।

क्या 2560px सही threshold है जिसे रखा जाए?

ज़्यादातर कंटेंट साइट्स के लिए हाँ। 2560px का सोर्स 2x पिक्सल डेंसिटी पर 1280px के डिस्प्ले बॉक्स को कवर कर लेता है, और आम मामला यही है। अगर आप full-bleed heroes, प्रोडक्ट ज़ूम या फ़ोटोग्राफ़ी गैलरी चलाते हैं तो इसे 3840 कीजिए। इसे पूरी तरह बंद तभी कीजिए जब आपको सचमुच बिना छेड़ी मूल फ़ाइलें परोसनी हों।