मैं सब कुछ एकल छवि में संयोजन करने का सुझाव नहीं देता, क्योंकि आप पूरी फ़ाइल डाउनलोड तक किसी भी छवि की 'प्रारंभिक उपस्थिति' में देरी करेंगे। दृश्यमान सामान ASAP लोड करने और समग्र थ्रूपुट के लिए बाकी को अनुकूलित करने के लिए बेहतर है।
यदि छवियां 50 केबी के तहत हैं, उदाहरण के लिए, उन्हें स्प्राइट छवियों के रूप में संयोजित करने का अर्थ हो सकता है, लेकिन मैं एक समय में 10 कहने का सुझाव दूंगा। यदि छवियां छोटी हैं, जैसे 5 केबी प्रत्येक, 30 एक समय में उचित होगी।
आप यहाँ बाधाओं की एक श्रृंखला में चिंता करने की मिल गया है के बारे में
- HTTP भूमि के ऊपर और समवर्ती कनेक्शन सीमाओं (स्प्राइट छवियों इस के साथ मदद)
- सर्वर थ्रूपुट भूमि के ऊपर (सही डिस्क कैशिंग और बढ़त कैशिंग के साथ व्याख्या करने योग्य)
- ब्राउज़र प्रतिपादन ओवरहेड (स्प्राइट्स आइकन और छोटे थंबनेल के लिए सबसे अच्छे हैं; उन्हें विशाल नहीं होना चाहिए, इसे 1 मेगापिक्सल के नीचे रखने की कोशिश करें)।
मौजूदा छवियों को एक साथ जोड़ना और जेपीईजी फॉर्म में फिर से संपीड़न कभी-कभी संपीड़न में सुधार कर सकता है, अन्य बार यह कलाकृतियों को पेश करेगा। उदाहरण के लिए, लाइन कला और तस्वीरों को मिलाकर एक बुरा विचार है। जेपीजी लाइन कला पर खराब है। यदि आप चाहते हैं तो पीएनजी -8 पीएनजी -8 का प्रयोग करें। कभी-कभी आप पाएंगे कि जेपीईजी 100% गुणवत्ता पर जीआईएफ या पीएनजी संस्करण से छोटा होता है, लेकिन अधिकांश समय, लाइन कला पीएनजी फॉर्म में सबसे अच्छी तरह से संग्रहीत होती है।
यदि आपके पास इन तस्वीरों के लिए आईडी हैं, और डिस्क कैशिंग के साथ गतिशील मार्ग पर जाने की योजना है, तो यह आपके कार्य को काफी सरल बनाता है।
ImageResizer लाइब्रेरी आपको इसकी गतिशील पाइपलाइन और डिस्क कैशिंग प्रणाली में आसानी से 'प्लग इन' करने देगी।
इस मामले में, आप implement IVirtualImageProvider
और IVirtualBitmapFile
देखेंगे। बिटमैप उत्पन्न करने और पाइपलाइन को बाकी हिस्सों को संभालने के एक साधारण उदाहरण के लिए Gradient plugin देखें।
आपको अपने यूआरएल वाक्यविन्यास को परिभाषित करना होगा और फ़ाइलइक्सिस्ट और गेटफाइल विधियों में इसकी तलाश करनी होगी। कुछ /combine-images.ashx?idlist=34,56,79,23 & dir = क्षैतिज & चौड़ाई = 50 & ऊंचाई = 50 की तरह कुछ।
फिर आपको प्रत्येक छवि को लोड करना होगा, इसे Managed API के साथ बिटमैप उदाहरण में आकार दें, और इसे आवंटित कैनवास पर खींचें।
आपकी अधिकांश बाधा शायद एसक्यूएल से छवियों को खींचने में होगी। यदि आपके पास सर्वर पर सीमित रैम है, तो एक सीरियल दृष्टिकोण एक समानांतर से सुरक्षित हो सकता है (आईई, एसक्यूएल से एक समय में एक छवि प्राप्त करें, आकार बदलें और इसे खींचें, डेटा का निपटान करें, आगे बढ़ें)। यदि आपकी स्रोत छवियों के साथ शुरू करने के लिए छोटे हैं, तो एक बहु थ्रेडेड ऐप्रेच ठीक हो सकता है। बस याद रखें कि इसे डिस्क को कैश करने के बावजूद इसे तेज़ बनाने की आवश्यकता है, क्योंकि अनुरोध 30 सेकेंड के बाद समय-समय पर समाप्त हो जाता है। ठीक से हो गया है, आप एक खाली डिस्क कैश के साथ 2 सेकंड के अंदर एक 10 छवि स्प्राइट की सेवा करने में सक्षम होना चाहिए, इसे कैश करने के बाद 20ms।
यदि यह थोड़ा जबरदस्त लगता है, तो मैं custom plugin development प्रदान करता हूं, लेकिन एक कतार है।
1 फ़ाइल-प्रति-अनुरोध दृष्टिकोण के लिए बहुत सारे फायदे हैं, और यह स्प्राइट बैंडवैगन पर छिपाने से पहले ImageResizer की डिस्क कैश और SqlReader प्लगइन्स को आजमाने के लायक हो सकता है। यह नहीं कह रहा कि यह गलत दृष्टिकोण है, लेकिन असुरक्षित एमवीसी + एसक्यूएल बहुत अधिक ओवरहेड जोड़ सकता है जो योगदान दे सकता है।
इससे पहले कि आप सूप की कोशिश करें, अत्याधुनिक, चौथे आयाम कोड में घुमाएंगे, आप हमें पोस्ट करना चाहते हैं, स्कॉट के समाधान को पहले कैसे प्रयास करें, और देखें कि यह आपके लिए काम करता है या नहीं? –