WordPress ko apni images 82% par compress karne se rokein
WordPress har JPEG ko jo woh generate karta hai, use 0–100 scale par quality 82 par dobara encode karta hai. Yeh default WP_Image_Editor::get_default_quality() me rehta hai aur laagu hota hai
Published
WordPress har JPEG ko jo woh generate karta hai, use 0–100 scale par quality 82 par dobara encode karta hai. Yeh default WP_Image_Editor::get_default_quality() me rehta hai aur har us derivative par laagu hota hai jo WordPress aapke upload se banata hai — thumbnail, medium, medium_large, large, aur har extra size jo aapki theme register karti hai. Photographs ke liye 82 file size aur artifacts ke beech ek theek-thaak trade hai. Lekin screenshots, UI captures, charts, logos, aur kisi bhi cheez ke liye jisme sharp text ya flat color ho, 82 saaf dikhne wali nuksaan wali quality hai: aapko har letter ke aas-paas mosquito noise rengti hui dikhti hai aur smooth gradients par banding aa jaati hai.
Ise badalne ke liye ek filter add karein aur apne thumbnails ko regenerate karein. Khaas kar screenshots ko theek karne ke liye behtar jawab aksar yahi hota hai ki WordPress ko shuru me JPEG dena hi band kar dein.
82 number aata kahaan se hai
WordPress ne apna JPEG default 90 se ghata kar 82 kiya tha version 4.5 (2016) me, ek page-weight optimization ke roop me. Yeh value wp-includes/class-wp-image-editor.php ke get_default_quality() se return hoti hai aur tab padhi jaati hai jab active editor — agar aapke host par Imagick hai to WP_Image_Editor_Imagick, warna WP_Image_Editor_GD — koi resized file likhta hai.
Zaroori baat: 82 har derivative size par laagu hota hai, ek baar nahi. Ek image upload karein, aur WordPress use encoder ke through kai baar chalata hai, har pass me quality 82 par dobara quantize karte hue. Original upload ki gayi file khud chhui nahi jaati agar woh big-image threshold (long edge par 2560px) se neeche hai. Agar woh us threshold se zyada hai, to WordPress quality 82 par ek dobara encode ki gayi -scaled.jpg banata hai aur usi ko “full” size ke roop me serve karta hai. To “meri full-resolution image to theek dikhti hai lekin page par wali version smeared dikhti hai” ka matlab lagbhag hamesha yahi hota hai ki srcset ek quality-82 sub-size ya -scaled file utha raha hai.
Quality kaise badlein
Hook karne ke liye ek hi filter hai. wp_editor_set_quality modern aur canonical wala hai — yeh JPEG aur WebP dono ke liye fire hota hai aur MIME type receive karta hai taaki aap branch kar sakein:
add_filter( 'wp_editor_set_quality', function ( $quality, $mime_type ) {
if ( 'image/jpeg' === $mime_type ) {
return 92; // up from 82
}
return $quality;
}, 10, 2 );
Ise ek chhote mu-plugin (wp-content/mu-plugins/) ya site-specific plugin me daalein. functions.php bhi chalta hai, lekin theme badalte hi yeh setting chali jaati hai.
Aapko purana jpeg_quality filter bhi recommend hota dikhega. Yeh abhi bhi fire hota hai (WordPress ise wp_editor_set_quality ke turant baad laagu karta hai, sirf JPEG ke liye), lekin dono ko hook karne ki koi zaroorat nahi — wp_editor_set_quality woh sab kuch cover kar leta hai jo purana wala karta tha, aur usse zyada.
Ek baat jo sab bhool jaate hain: yeh filter sirf un images par asar karta hai jo iske active hone ke baad encode hoti hain. Jo bhi thumbnail pehle se wp-content/uploads me pada hai, woh 82 par likha gaya tha aur 82 par hi rahega. Unhe regenerate karein:
wp media regenerate --yes
Agar aap WP-CLI par nahi hain, to Regenerate Thumbnails plugin admin ke through yahi kaam karta hai.
Kisi number par tay karne se pehle, yeh dekh lena faydemand hai ki koi di gayi quality aapki image ke saath actual me karti kya hai, bajaye andaza lagane ke. Hamara WordPress JPEG quality tool browser me har quality level par ek sample ko dobara encode karta hai taaki aap artifacts ko aate hue dekh sakein — yeh screenshot par 82, 90, aur 100 ke beech ka farq is tarah saaf kar deta hai jaisa config file me likha ek number kabhi nahi kar paayega.
Screenshots aur flat graphics ke liye behtar fix
JPEG number badhana bimari ke lakshan ka ilaaj hai. Screenshots ke saath asli dikkat yeh hai ki JPEG unke liye galat codec hai. JPEG ka DCT compression photographic gradients ke liye tuned hai; yeh text aur UI chrome ke hard black-on-white edges par bikhar jaata hai, aur yahi wajah hai ki quality 82 screenshot par photo ke mukable itna zyada bura dikhta hai.
Iske bajaye ek PNG upload karein. WordPress PNG sub-sizes ko PNG hi rakhta hai, aur PNG lossless hota hai — quality filter use chhuta hi nahi, isliye kisi bhi size par koi artifacts nahi hote, sirf saaf resampling. Screenshot ke liye ek achhi tarah optimize kiya gaya PNG aksar us hi image ke high-quality JPEG se chhota hota hai, kyunki flat color PNG me achhe se compress hota hai aur JPEG me bahut kharab.
Agar aap lossy format ki chhoti files chahte hain lekin JPEG ke edge damage ke bina, to WebP beech ka raasta hai — lekin uski quality bhi aap usi wp_editor_set_quality filter ke through control karte hain jo upar dikhaya gaya hai, image/webp par branch karte hue.
Kya nahi karna chahiye
Quality ko globally 100 par set na karein. Aadhe forum threads par yahi sabse zyada vote wala jawab hai, aur yeh galat hai. Quality 100 JPEG lossless nahi hota — yeh phir bhi quantize karta hai — lekin yeh aapki site ki har photograph ko bina kisi dikhne wale fayde ke bahut zyada bada kar deta hai, jisse LCP aur Core Web Vitals kharab ho jaate hain. Jis format ko zaroorat hai uske liye number badhaayein, ya graphics ke liye format badlein; poori site par compression mat udaayein.
class-wp-image-editor.php ko edit na karein. Core me get_default_quality() ki return value badalna tab tak chalta hai jab tak agla wp core update chup-chaap use overwrite nahi kar deta. Filter ka istemaal karein.
“Compression se bachne” ke liye image sizes disable na karein. Thumbnail generation band karne se re-encoding nahi rukti — yeh responsive srcset ko tod deta hai, jisse browsers phone par aapki full-size image download karte hain. Alag dikkat, aur natija aur bhi bura.
Yeh maankar mat chalein ki dobara upload karne se purani images theek ho jaayengi. Agar aapne filter set kar liya lekin regenerate step chhod diya, to har purana derivative abhi bhi quality 82 par hai. Filter sirf aage ke liye kaam karta hai.
Agar aapki images 2560px se neeche hain to -scaled file ko dosh na dein — woh path unke liye kabhi chalta hi nahi. Agar aap us par ho rahe hain aur chahte hain ki chhua na gaya original serve ho, to woh ek alag setting hai; dekhein scaled images disable karna.
Abhi bhi atke hue hain?
Agar regenerate karne ke baad bhi koi khaas size galat dikhti hai, to confirm karein ki page actual me kaunsi file serve kar raha hai — image ko naye tab me kholein aur check karein ki filename dimension suffix (-1024x768.jpg) ya -scaled.jpg par khatm hota hai ya nahi. Image sizes inspector har woh derivative dikhata hai jo WordPress ek upload se generate karta hai, taaki aap thheek se dekh sakein ki aapka srcset browser ko kaunsa size de raha hai aur galat file debug karna band kar dein.