divmagic Make design
SimpleNowLiveFunMatterSimple
शिप करने से पहले रिस्पॉन्सिव ब्रेकपॉइंट्स पर इमेज क्वालिटी का परीक्षण कैसे करें
Blogs›उत्तरदायी छवियाँ›शिप करने से पहले रिस्पॉन्सिव ब्रेकपॉइंट्स पर इमेज क्वालिटी का परीक्षण कैसे करें
उत्तरदायी छवियाँ

शिप करने से पहले रिस्पॉन्सिव ब्रेकपॉइंट्स पर इमेज क्वालिटी का परीक्षण कैसे करें

रिस्पॉन्सिव इमेजेस अब केवल एक “अच्छा-होने-वाला” फीचर नहीं रह गई हैं, वे वेब प्रदर्शन और उपयोगकर्ता अनुभव का एक मुख्य स्तंभ बन चुकी हैं। 4K मॉनिटर पर आने वाला विज़िटर क्रिस्प प्रोडक्ट शॉट्स की उम्मीद करता है; 320px-चौड़े फीचर फोन पर यूज़र तेज़ डिलीवरी और स्वीकार्य स्पष्टता की उम्मीद करता है। इन विरोधी ज़रूरतों को संतुलित करना डेवलपर की दैनिक चुनौती है, फिर भी यथार्थवादी रिस्पॉन्सिव ब्रेकपॉइंट्स पर इमेज क्वालिटी का परीक्षण अक्सर बाद में सोचा जाता है।

अधिकांश टीमें ब्राउज़र विंडो का आकार बदलकर इमेजेस का परीक्षण करती हैं। यह उत्पादक लगता है, लेकिन यह रिग्रेशन छिपा देता है: ब्राउज़र कैश 1x वैरिएंट परोसता रहता है जबकि आपका रेटिना डिज़ाइन किसी का ध्यान नहीं खींच पाता, या एक नया इमेज कंपोनेंट गलती से 360px चौड़ाई पर 640px सोर्स परोस देता है, जिससे बिना किसी दृश्य लाभ के फ़ाइल का वज़न दोगुना हो जाता है।

इस गाइड में, हम इन समस्याओं को शिप होने से पहले पकड़ने के लिए व्यावहारिक तकनीकों का पता लगाएंगे, स्वचालित विज़ुअल रिग्रेशन से लेकर प्रोग्रामेटिक क्वालिटी स्कोरिंग तक, जो एक आधुनिक CI पाइपलाइन में एकीकृत होती हैं। हम उन टूल्स, मेट्रिक्स और वर्कफ़्लोज़ को देखेंगे जो रिस्पॉन्सिव इमेज टेस्टिंग को एक मैनुअल काम से बदलकर एक नियतिवादी, स्वचालित सुरक्षा घेरा बना देते हैं।

रिस्पॉन्सिव इमेज क्वालिटी टेस्टिंग क्यों मायने रखती है

रिस्पॉन्सिव इमेजेस तीन महत्वपूर्ण मेट्रिक्स को प्रभावित करती हैं: लार्जेस्ट कंटेंटफुल पेंट (LCP), क्यूमुलेटिव लेआउट शिफ्ट (CLS), और अनुभव की गई गुणवत्ता। एक धुंधली हीरो इमेज विश्वास को कमजोर करती है; 3G पर एक विशाल 4K इमेज इंटरैक्शन को रोक देती है। HTTP आर्काइव के अनुसार, एक सामान्य डेस्कटॉप पेज पर 1 MB से अधिक इमेजेस होती हैं, मोबाइल पर यह लगभग 800 KB होती है। इसका अधिकांश हिस्सा बर्बाद बाइट्स होता है क्योंकि गलत वैरिएंट लोड होता है।

गुणवत्ता के लिए परीक्षण का मतलब है सत्यापन:

  • सही रेज़ोल्यूशन: हर व्यूपोर्ट/DPR संयोजन पर, ब्राउज़र को पर्याप्त तेज इमेज मिलती है बिना पिक्सेल की अधिकता के।
  • आर्ट डायरेक्शन: क्रॉप किए गए या फोकस किए गए संस्करण (<picture> के माध्यम से) अभीष्ट विषय दिखाते हैं, न कि एक अजीब ज़ूम।
  • फॉर्मेट चयन: AVIF/WebP जैसे आधुनिक फॉर्मेट सुचारू रूप से फॉलबैक करते हैं, और फॉलबैक दृश्य रूप से खराब JPEG नहीं होता।
  • लेज़ी लोडिंग: इमेजेस सही समय पर लोड होती हैं, जिससे लेआउट में उछाल नहीं आता।

CI में इमेज क्वालिटी रिग्रेशन का जल्दी पता लगाना उत्पादन समस्याओं को रोकता है जो ब्रांड धारणा और SEO को नुकसान पहुंचाती हैं। एक छोटी सी चूक, जैसे एक लापता srcset, LCP को रातोंरात लाल क्षेत्र में धकेल सकती है।

मैनुअल बाधा

पारंपरिक QA में Chrome DevTools खोलना, डिवाइस टूलबार को टॉगल करना, और हर ब्रेकपॉइंट को आँखों से जाँचना शामिल है। यह पाँच पेजों वाली ब्रोशर साइट की हीरो इमेज के लिए काम करता है। एक ई-कॉमर्स प्लेटफॉर्म पर जिसमें हजारों प्रोडक्ट इमेजेस और 20+ ब्रेकपॉइंट्स हों, यह अव्यावहारिक है। इसकी कीमत:
  • समय: पाँच इमेज-भारी पेजों पर पाँच मुख्य व्यूपोर्ट्स का परीक्षण करने में 3–4 घंटे लग सकते हैं।
  • संगति: एक QA इंजीनियर को जो “पर्याप्त तेज” लगता है, वह दूसरे को अस्वीकार्य लग सकता है।
  • रिग्रेशन: CMS अपडेट इमेज कंप्रेशन डिफॉल्ट्स बदल देता है; किसी का ध्यान तब तक नहीं जाता जब तक कोई ग्राहक धुंधले थंबनेल की शिकायत नहीं करता।

lines, dot, wall art, minimalist, geometric, pattern, abstract, decor, digital print, boho, modern, poster, nature, rainbow, boho printable, bohemian art, abstract background, abstract design, digital illustration, contemporary, bohemian, design, drawing, beautiful wallpaper, iphone wallpaper, background

एक नियतिवादी इमेज क्वालिटी टेस्ट सूट बनाना

विश्वास के साथ शिप करने के लिए, इमेज क्वालिटी को किसी भी अन्य परीक्षण योग्य संपत्ति की तरह मानें। लक्ष्य: प्रोग्रामेटिक रूप से यह सुनिश्चित करना कि परिभाषित ब्रेकपॉइंट्स पर हर इमेज वैरिएंट गुणवत्ता सीमा को पूरा करता है।

चरण 1: अपना टेस्ट मैट्रिक्स परिभाषित करें

उन व्यूपोर्ट्स और पिक्सल रेशियो से शुरू करें जो मायने रखते हैं। वास्तविक डिवाइस सामान्य चौड़ाई के आसपास क्लस्टर करते हैं: 390, 428, 810, 1280, 1440, 1920, लेकिन DPR स्केलिंग पर भी विचार करें। एक उपयोगी तरीका यह है कि आप अपनी sizes विशेषता और srcset डिस्क्रिप्टर के आधार पर ब्राउज़र द्वारा अनुरोधित प्रभावी इमेज चौड़ाई की गणना करें।

उदाहरण के लिए, यदि आप परिभाषित करते हैं:

<img src="hero-640.jpg"
     srcset="hero-640.jpg 640w,
             hero-1280.jpg 1280w,
             hero-1920.jpg 1920w"
     sizes="(max-width: 800px) 100vw, 50vw"
     alt="hero">

अनुरोधित प्रभावी इमेज चौड़ाई लगभग 800px तक 100vw, फिर उसके बाद 50vw होगी। सामान्य व्यूपोर्ट्स (390, 428, 810, 1280, 1440, 1920) और DPR 1, 2, 3 पर, ब्राउज़र सबसे नज़दीकी उम्मीदवार चुनता है। इन संयोजनों में से प्रत्येक का परीक्षण मैन्युअल रूप से करना असंभव है, स्क्रिप्ट सेकंडों में इन्हें चला सकती हैं।

चरण 2: संदर्भ स्क्रीनशॉट कैप्चर करें

Playwright, Puppeteer, या Selenium जैसे टूल हर ब्रेकपॉइंट पर स्क्रीनशॉट कैप्चर को स्वचालित कर सकते हैं। निश्चित व्यूपोर्ट और DPR वाले हेडलेस ब्राउज़र का उपयोग करें (Playwright deviceScaleFactor प्रदान करता है)। ब्राउज़र कैशिंग अक्षम करें, और पिक्सेल-स्थिर कैप्चर पाने के लिए स्मूथ एनिमेशन अक्षम करने पर विचार करें। संदर्भ स्क्रीनशॉट को एक संस्करण-नियंत्रित निर्देशिका (जैसे, /tests/visual-baseline) में संग्रहीत करें।

एक न्यूनतम Playwright स्क्रिप्ट कुछ इस तरह दिख सकती है:

const { chromium } = require('playwright');

(async () => { const browser = await chromium.launch(); const context = await browser.newContext({ viewport: { width: 390, height: 844 }, deviceScaleFactor: 3, }); const page = await context.newPage(); await page.goto('http://localhos:3000/produc/123'); await page.screensot({ path: 'baseline/produc-390-dpr3.png', fullPage: true }); await browser.close(); })();

इमेज-भारी पेजों के लिए हमेशा फुल-पेज स्क्रीनशॉट कैप्चर करें, ताकि हीरो इमेजेस और इन-लाइन प्रोडक्ट इमेजेस दोनों का पता चले, जो विभिन्न परिस्थितियों में लेआउट बदल सकती हैं।

चरण 3: विज़ुअल रिग्रेशन टूल से तुलना करें

Resemble-js, pixelmatch, या BackstopJS जैसी लाइब्रेरीज़ दो छवियों की पिक्सेल-दर-पिक्सेल तुलना करती हैं। एक सामान्य वर्कफ़्लो:
  1. बदलाव (जैसे डिप्लॉयमेंट प्रीव्यू) के बाद एक नया स्क्रीनशॉट कैप्चर करें।
  2. इसे बेसलाइन के साथ ओवरले करें और मिसमैच प्रतिशत की गणना करें।
  3. यदि मिसमैच एक सीमा से अधिक हो, मान लीजिए 2%, तो बिल्ड विफल कर दें।
  4. एक विज़ुअल डिफ उत्पन्न करें जो दिखाता है कि वास्तव में कौन से पिक्सेल बदले हैं।

लेकिन पिक्सेल-परफेक्ट तुलना नाजुक है, एक अकेला पैडिंग समायोजन हजारों इमेज पिक्सेल को “बदले हुए” के रूप में फ़्लैग कर सकता है, भले ही इमेज क्वालिटी बरकरार हो। Percy या Chromatic जैसे स्मार्ट टूल AI-संचालित डिफिंग प्रदान करते हैं जो लेआउट शिफ्ट्स को अनदेखा करते हैं और दृश्य सामग्री पर ध्यान केंद्रित करते हैं। हालाँकि, वे सब्सक्रिप्शन लागत के साथ आते हैं और इमेज-क्वालिटी विशिष्ट जाँचों के लिए कम अनुकूलन योग्य हैं।

पिक्सेल तुलना से आगे: इमेज क्वालिटी मेट्रिक्स

एक स्क्रीनशॉट इसका उत्तर दे सकता है कि “क्या यह बदला?” लेकिन यह नहीं कि “क्या यह अभी भी तेज है?” उसके लिए, हमें SSIM, PSNR, या VMAF जैसे संरचनात्मक समानता सूचकांक चाहिए। ये एक संख्यात्मक स्कोर की गणना करते हैं जो मानव धारणा के करीब गुणवत्ता का अनुमान लगाता है, यह परीक्षण करने के लिए आदर्श है कि कोई नई कंप्रेशन सेटिंग इमेज की तीक्ष्णता को कम करती है या नहीं।

portrait, adult, people, woman, art, fashion, vintage, artistic, antique style, design, old-fashioned, model, face, female, digital art, photo art, brown fashion, brown art, brown model, brown digital, brown design

एक परिदृश्य पर विचार करें: आप फ़ाइल आकार को और कम करने के लिए AVIF कंप्रेशन स्लाइडर को क्वालिटी 30 से 35 में बदल रहे हैं। एक विज़ुअल डिफ कोई नाटकीय बदलाव नहीं दिखा सकता, लेकिन SSIM कपड़े या त्वचा टोन पर सूक्ष्म बनावट हानि प्रकट कर सकता है जो 2x डिस्प्ले पर ध्यान देने योग्य होगी।

यहाँ बताया गया है कि आप गुणवत्ता जांच को स्क्रिप्ट कैसे कर सकते हैं:

const sharp = require('sharp');
const ssim = require('image-ssim'); // hypothetical package

const reference = await sharp('baseline/produc-1280.jpg').raw().toBuffer();const candidate = await sharp('build/produc-1280.jpg').raw().toBuffer();const score = await ssim.compare(reference, candidate);assert(score > 0.95, 'Image quality dropped below acceptable threshold');

SSIM 0 और 1 के बीच का मान आउटपुट करता है। रिस्पॉन्सिव इमेजेस के लिए, 0.95–0.98 की सीमा आमतौर पर मामूली बदलावों को सहन करते हुए ध्यान देने योग्य गिरावट को पकड़ लेती है। आप इसे CI पाइपलाइन में एकीकृत कर सकते हैं जो हर पुल रिक्वेस्ट पर चलता है, प्रत्येक जनरेट की गई इमेज वैरिएंट की प्रोडक्शन वर्शन से तुलना करता है।

बिना वास्तविक उपकरणों के रिस्पॉन्सिव व्यवहार का परीक्षण

उपकरण प्रयोगशालाएँ महँगी और धीमी हैं। आधुनिक हेडलेस ब्राउज़र अधिकांश मोबाइल विशेषताओं का अनुकरण कर सकते हैं, लेकिन अकेले DPR और व्यूपोर्ट रंग प्रोफाइल, OLED गहरे काले, या परिवेशी प्रकाश को दोहरा नहीं सकते। फिर भी, शिपिंग के आत्मविश्वास के लिए, DPR-जागरूक परीक्षण अधिकांश रिस्पॉन्सिव इमेज समस्याओं को कवर करता है।

एक सुझाव: यह सत्यापित करने के लिए कि ब्राउज़र वास्तव में अपेक्षित इमेज फ़ाइल डाउनलोड कर रहा है (न कि केवल रेंडर कर रहा है), Playwright के रिक्वेस्ट इंटरसेप्शन का उपयोग करें। हर इमेज रिक्वेस्ट और उसके HTTP हेडर को लॉग करें, फिर फ़ाइल आकार और आयामों की पुष्टि करें कि वे अपेक्षाओं से मेल खाते हैं:

bpage.on('request', request => \{
  if (request.resourceType() === 'image') \{
    console.log(request.url(), request.headers()['accepet']);
  \}
\});

पूरी तरह से स्वचालित जाँच के लिए, page.$$eval का उपयोग करके img.currentSrc या NaturalWidth/NaturalHeight प्राप्त करें तथा srcset के वे रेंडर किए गए चित्रों की तुलना अपेक्षित ब्रेकपॉइंट मानों से करें। इससे [[PROTECTED_102]]srcset[[PROTECTED_103]]रिज़ॉल्यूशन लॉजिक सुनिश्चित होता है कि यह इच्छित रूप से काम करता है।

स्वचालित इमेज रिक्वेस्ट लॉगिंग से पता चलता है कि CDN कब एक अप्रत्याशित वैरिएंट डिलीवर करता है, जो CMS माइग्रेशन या CDN कॉन्फ़िगरेशन बदलावों के बाद एक सामान्य समस्या है। इसे प्रोडक्शन में नहीं, बल्कि स्टेजिंग में पकड़ें।

WebP/AVIF फ़ॉलबैक और फ़ॉर्मेट तत्परता का सत्यापन

आधुनिक इमेज <picture> तत्व पर निर्भर करती हैं जिसमें कई <source> टैग होते हैं। एक बार-बार होने वाली बग: पहला <source> ब्राउज़र द्वारा समर्थित प्रकार निर्दिष्ट करता है, लेकिन srcset के अंदर अमान्य चौड़ाई होती है, जिससे ब्राउज़र कम-रिज़ॉल्यूशन वाले JPEG पर फ़ॉलबैक करता है। या फ़ॉलबैक <img> एक पुराने आकार बदले गए थंबनेल की ओर इशारा करता है जो रेटिना पर भयानक दिखता है।

architecture, museum, modern architecture, building, glass, modern, icon, landmark, digital sketch, design, digital manipulation, modern architecture, modern, digital sketch, digital sketch, digital sketch, digital sketch, digital sketch

इसका परीक्षण करने के लिए, फ़ॉर्मेट सपोर्ट को टॉगल करके स्क्रीनशॉट कैप्चर करें। उदाहरण के लिए, Playwright का browser.newContext(\{ ignoreHTTPSErrors: true \}) फ़ॉर्मेट को प्रभावित नहीं करता, लेकिन आप हेडर के आधार पर सामग्री सशर्त रूप से प्रस्तुत कर सकते हैं। एक बेहतर तरीका: उसी परीक्षण सूट को एक स्टेजिंग वातावरण के विरुद्ध चलाएँ जो जानबूझकर WebP/AVIF समर्थन को अक्षम करता है, जैसे क्वेरी पैरामीटर ?no-webp=1के माध्यम से, और स्क्रीनशॉट की आधुनिक फ़ॉर्मेट बेसलाइन से तुलना करें। अंतर स्वीकार्य गुणवत्ता सीमा के भीतर होना चाहिए, यह पुष्टि करते हुए कि आपके फ़ॉलबैक चित्र पर्याप्त हैं।

CI एकीकरण: इमेज गुणवत्ता को बिल्ड-स्टेप बनाना

पूरे सूट को कुछ npm स्क्रिप्ट में लपेटें। एक सामान्य CI कार्य इस प्रकार हो सकता है:
  1. एक स्टेजिंग वातावरण (Vercel प्रीव्यू, Netlify डिप्लॉय प्रीव्यू) शुरू करें।
  2. एक Playwright स्क्रिप्ट चलाएँ जो सभी ब्रेकपॉइंट्स पर लूप करती है, स्क्रीनशॉट कैप्चर करती है और अनुरोधित इमेज URL लॉग करती है।
  3. एक तुलना स्क्रिप्ट चलाएँ जो हीरो और मुख्य उत्पाद छवियों के लिए SSIM स्कोर की गणना करती है।
  4. साथ-साथ अंतर और गुणवत्ता स्कोर के साथ एक HTML रिपोर्ट जनरेट करें, इसे CI कलाकृति के रूप में अपलोड करें।
  5. बिल्ड को विफल करें यदि कोई इमेज गुणवत्ता सीमा से नीचे आती है या अपेक्षित फ़ाइल आकार से 20% से अधिक विचलित होती है।

यह रिस्पॉन्सिव इमेज QA को एक आकस्मिक मैन्युअल जाँच से एक नियतात्मक, दोहराने योग्य चरण में बदल देता है। डेवलपर्स को अपने पुल रिक्वेस्ट पर तत्काल प्रतिक्रिया मिलती है, अब "मेरी मशीन पर ठीक दिखता है" नहीं।

"हमारे CI में प्रोग्रामेटिक इमेज गुणवत्ता जाँच जोड़ने से प्रति रिलीज़ चक्र में 15+ घंटे बचे और उन प्रतिगमनों को समाप्त किया जो हर दूसरे स्प्रिंट में प्रोडक्शन में आ जाते थे।"

डेवलपर टूल के साथ अंतर को पाटना

स्वचालन के बावजूद, डेवलपर्स को अभी भी UI पर तेज़ी से पुनरावृत्ति करने की आवश्यकता होती है। जब आप एक हीरो सेक्शन को फिर से लिखते हैं, तो आपको यह विश्वास चाहिए कि कोड कमिट करने से पहले नई रचना हर ब्रेकपॉइंट पर तेज दिखती है। यहीं पर ब्राउज़र एक्सटेंशन अंतर को पाट सकते हैं, जिससे आप एक अच्छी तरह से परीक्षण किए गए UI ब्लॉक को, उसके रिस्पॉन्सिव इमेज मार्कअप और गुणवत्ता सेटिंग्स के साथ, सीधे अपने स्थानीय वातावरण में कॉपी कर सकते हैं।

srcset चौड़ाई हाथ से लिखने और संपीड़न अनुपात के मूल से मेल खाने की उम्मीद करने के बजाय, उपकरण जो सटीक गणना की गई शैलियों और इमेज स्रोतों को कैप्चर करते हैं, डेवलपर्स को गुणवत्ता का सम्मान करते हुए तेजी से शिप करने देते हैं। एक बार ब्लॉक आयात होने के बाद, स्वचालित परीक्षण सूट अंतिम परिणाम को मान्य करता है, यह दोनों दुनिया का सर्वश्रेष्ठ है।

सफलता की कुंजियाँ: एक चेकलिस्ट

  • अपने एनालिटिक्स शीर्ष उपकरणों को कवर करने वाले व्यूपोर्ट और DPR का एक यथार्थवादी मैट्रिक्स परिभाषित करें।
  • हेडलेस ब्राउज़रों के साथ स्क्रीनशॉट कैप्चर को स्वचालित करें, बेसलाइन को वर्शन कंट्रोल में संग्रहीत करें।
  • रिग्रेशन डिटेक्शन के लिए विज़ुअल डिफिंग का उपयोग करें, लेकिन गुणवत्ता-विशिष्ट दावों के लिए SSIM/PSNR जोड़ें।
  • आधुनिक और फ़ॉलबैक दोनों फ़ॉर्मेट का परीक्षण करें ताकि सुचारू रूप से गिरावट सुनिश्चित हो सके।
  • सब कुछ CI में एकीकृत करें; बिल्ड को जल्दी विफल करें और कार्रवाई योग्य डिफ रिपोर्ट प्रदान करें।

Bar chart comparing time spent on image quality testing: manual takes 120 minutes, semi-automated 45 minutes, fully automated 10 minutes per build.

जहाँ उत्तरदायित्व गुणवत्ता से मिलता है: सामान्य अंध धब्बे

मज़बूत स्वचालन के बावजूद, कुछ क्षेत्रों में अभी भी मानवीय निर्णय की आवश्यकता है। कला निर्देशन, यह सुनिश्चित करना कि जब इमेज को मोबाइल के लिए अलग तरह से क्रॉप किया जाए तो उसका फोकल पॉइंट केंद्रित रहे, स्वचालित करना कठिन है। विज़ुअल डिफिंग एक बदलाव को चिह्नित कर सकती है, लेकिन केवल एक मानव ही कह सकता है कि क्या नया क्रॉप उत्पाद को सही ढंग से उजागर करता है।

गति बनाम गुणवत्ता के व्यापार-बंद भी ग्रे क्षेत्र में रहते हैं। गुणवत्ता को 80 से 75 तक कम करना 6-इंच की स्क्रीन पर अदृश्य हो सकता है, फिर भी 27-इंच मॉनिटर पर बैंडिंग ला सकता है। स्वचालित SSIM सीमाओं को ट्यून किया जा सकता है, लेकिन बार बहुत ऊंचा सेट करेंगे तो आप उचित अनुकूलन को अस्वीकार कर देंगे; बहुत कम सेट करेंगे तो वास्तविक गिरावट को याद करेंगे। निरंतर निगरानी और कभी-कभी मैन्युअल स्पॉट-चेक महत्वपूर्ण बने रहते हैं।

Doughnut chart showing distribution of common responsive image issues: blurry images 35%, wrong crop 25%, slow loading 20%, layout shift 15%, no issues 5%.

अंतिम विचार

रिस्पॉन्सिव इमेज परीक्षण को चिंता का स्रोत नहीं होना चाहिए। इसे एक कोड गुणवत्ता मीट्रिक के रूप में मानते हुए, यूनिट टेस्ट के समान कठोरता के साथ, टीमें धुंधली हीरो, गलत क्रॉप और मल्टी-मेगाबाइट मोबाइल इमेज को उपयोगकर्ता के देखने से पहले पकड़ सकती हैं। स्वचालित स्क्रीनशॉट कैप्चर को संरचनात्मक समानता स्कोरिंग के साथ जोड़ें, इसे अपनी CI पाइपलाइन में वायर करें, और आप अधिक आत्मविश्वास के साथ तेजी से शिप करेंगे।

एक ऐसे युग में जहाँ लोड टाइम का हर मिलीसेकंड और गुणवत्ता का हर पिक्सेल उपयोगकर्ता विश्वास को परिभाषित करता है, स्वचालित रिस्पॉन्सिव इमेज परीक्षण आपके डिज़ाइन सिस्टम का सुरक्षा जाल है। इसे एक बार बनाएं, और हर बाद का रिलीज़ आपको धन्यवाद देगा।

DivMagic के साथ आज ही निर्माण शुरू करें

किसी भी वेबसाइट से कोड कॉपी करने और अपने स्वयं के प्रोजेक्ट में इसका उपयोग करने के लिए 10,000+ डेवलपर्स, डिजाइनरों और व्यवसाय मालिकों से जुड़ें।

Get DivMagic for 42% off

Limited time deal for 22:45