Picasso एक लाइब्रेरी है जो Android एप्लिकेशन में इमेज लोड करने के लिए Square कंपनी द्वारा विकसित की गई है। यह लाइब्रेरी नेटवर्क से ग्राफिक्स लोड करने, कैश करने और प्रदर्शित करने के लिए एक सरल और अभिव्यंजक API प्रदान करती है। Picasso के GitHub आँकड़ों के अनुसार, लाइब्रेरी को 100,000 से अधिक बार डाउनलोड किया गया है। Picasso स्वचालित रूप से मेमोरी प्रबंधित करता है और इमेज को कई स्तरों पर कैश करता है।
मुख्य बिंदु
Picasso Android में एसिंक्रोनस इमेज लोडिंग के लिए Square द्वारा बनाई गई एक लाइब्रेरी है। इसका नाम कलाकार पाब्लो पिकासो के नाम पर रखा गया है, जो लाइब्रेरी के दर्शन को दर्शाता है: एक जटिल कार्य को सरल और सुरुचिपूर्ण API में बदलना। यह Android समुदाय में इमेज लोडिंग के लिए सबसे लोकप्रिय लाइब्रेरी है।
Picasso की वास्तुकला न्यूनतम है: लाइब्रेरी लोडिंग के लिए थ्रेड पूल, मेमोरी कैश के लिए LruCache और डिस्क कैश के लिए DiskLruCache का उपयोग करती है। Glide के विपरीत, Picasso को AppGlideModule कॉन्फ़िगरेशन की आवश्यकता नहीं है और निर्भरता जोड़ने के तुरंत बाद उपयोग के लिए तैयार है। यह इसे प्रोटोटाइप और छोटे प्रोजेक्ट के लिए आदर्श विकल्प बनाता है।
Picasso 2.8 नवीनतम स्थिर संस्करण है, जो Android API 21+ और Java 8+ के साथ संगत है। लाइब्रेरी को कॉन्फ़िगरेशन के लिए Gradle प्लगइन या एनोटेशन की आवश्यकता नहीं है, जो संस्करणों के बीच माइग्रेशन को सरल बनाता है और अपडेट के दौरान त्रुटियों की संभावना को कम करता है। अपने लंबे इतिहास के बावजूद, Picasso दुनिया भर के हजारों प्रोजेक्ट में मांग में बना हुआ है।
Picasso का मुख्य कार्य URL द्वारा इमेज लोड करना, उसे डिकोड करना, आवश्यकता होने पर आकार बदलना और ImageView में प्रदर्शित करना है। लाइब्रेरी स्वचालित रूप से बैकग्राउंड थ्रेड, कैश और सूचियों में ImageView के पुन: उपयोग का प्रबंधन करती है।
2013 में रिलीज़ होने के बाद से, Picasso Android समुदाय में इमेज लोडिंग के लिए मानक बन गया है। लाइब्रेरी का उपयोग हजारों एप्लिकेशन में किया जाता है, इसके न्यूनतम प्रवेश सीमा के कारण - पहले उपयोग के लिए कोड की सिर्फ एक पंक्ति पर्याप्त है।
प्राथमिकताएँ Picasso में इमेज लोडिंग क्रम को प्रबंधित करने की अनुमति देती हैं। डिफ़ॉल्ट रूप से, सभी अनुरोधों की सामान्य प्राथमिकता होती है, लेकिन महत्वपूर्ण इमेज के लिए priority विधि के माध्यम से उच्च प्राथमिकता सेट की जा सकती है। यदि ImageView पुन: उपयोग किया जाता है (उदाहरण के लिए, RecyclerView में), Picasso स्वचालित रूप से पिछले अनुरोध को रद्द करता है और एक नया शुरू करता है, स्क्रॉल करते समय इमेज झिलमिलाहट को रोकता है।
Picasso सुविधाओं का एक सेट प्रदान करता है जो अनावश्यक जटिलता के बिना मोबाइल एप्लिकेशन में इमेज के साथ काम करने के मुख्य परिदृश्यों को कवर करता है।
Picasso का कैश दो स्तरों से बना है: तेज़ पहुँच के लिए RAM और स्थायी भंडारण के लिए डिस्क। इमेज का अनुरोध करते समय, लाइब्रेरी पहले मेमोरी कैश की जाँच करती है, फिर डिस्क की, और उसके बाद ही नेटवर्क अनुरोध करती है। यह बार-बार लोड की जाने वाली इमेज के प्रदर्शन को काफी तेज करता है।
ट्रांसफ़ॉर्मेशन हर बार मूल को डिकोड किए बिना इमेज का आकार बदलने, क्रॉप करने या घुमाने की अनुमति देते हैं। Picasso अंतर्निहित ट्रांसफ़ॉर्मेशन CenterCrop और CenterInside प्रदान करता है, और Transformation इंटरफ़ेस के माध्यम से कस्टम ट्रांसफ़ॉर्मेशन बनाने की भी अनुमति देता है। ट्रांसफ़ॉर्म की गई इमेज अलग से कैश की जाती हैं।
प्लेसहोल्डर नेटवर्क से इमेज लोड होने के दौरान प्रदर्शित होता है, उपयोगकर्ता को विज़ुअल फीडबैक देता है। लोडिंग विफल होने पर एरर इमेज दिखाई जाती है। Picasso एक ऐसी इमेज का भी समर्थन करता है जो नया संस्करण लोड होने तक प्रदर्शित होती है, जो अपडेटेबल अवतारों के लिए उपयोगी है।
Picasso URL, संसाधनों, फ़ाइलों, कंटेंट प्रोवाइडर और URI से इमेज लोड करने का समर्थन करता है। load() विधि इन सभी प्रकारों के लिए ओवरलोड की गई है, और लाइब्रेरी स्वचालित रूप से स्रोत निर्धारित करती है। संसाधनों और फ़ाइलों के लिए, Picasso नेटवर्क अनुरोध नहीं करता बल्कि सीधे डेटा लोड करता है, जो अंतर्निहित ग्राफिक्स के प्रदर्शन को तेज करता है।
Picasso RequestCreator और Dispatcher पर आधारित आर्किटेक्चर का उपयोग करता है। प्रत्येक अनुरोध Picasso.get().load() के माध्यम से बनाया जाता है और थ्रेड पूल में निष्पादित किया जाता है। Dispatcher अनुरोध कतार, प्राथमिकताओं और ImageView के पुन: उपयोग पर रद्दीकरण का प्रबंधन करता है।
into(view) कॉल करने पर, Picasso एक Action ऑब्जेक्ट बनाता है जिसमें URL, ट्रांसफ़ॉर्मेशन, लक्ष्य और कॉलबैक होता है। Action को Dispatcher कतार में रखा जाता है। इंजन Downloader (डिफ़ॉल्ट रूप से OkHttp) के माध्यम से इमेज लोड करता है, Bitmap डिकोड करता है, ट्रांसफ़ॉर्मेशन लागू करता है और परिणाम UI थ्रेड को देता है। सभी इमेज स्वचालित रूप से ImageView आकार में फ़िट हो जाती हैं।
Picasso.get()
.load("https://example.com/image.jpg")
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.resize(400, 300)
.centerCrop()
.into(imageView)
Picasso की स्थापना Gradle के माध्यम से की जाती है। लाइब्रेरी Maven Central के माध्यम से वितरित की जाती है और जटिल कॉन्फ़िगरेशन की आवश्यकता नहीं होती है। न्यूनतम Android API संस्करण 21 है।
मॉड्यूल स्तर के build.gradle फ़ाइल में implementation ‘com.squareup.picasso:picasso:2.8’ जोड़ें। Gradle सिंक के बाद, Picasso उपयोग के लिए तैयार है। नेटवर्क संचालन के लिए, Picasso स्वचालित रूप से OkHttp का उपयोग करता है यदि वह प्रोजेक्ट में मौजूद है, या अंतर्निहित HttpURLConnection का।
dependencies {
implementation "com.squareup.picasso:picasso:2.8"
}
// OkHttp से लोड करने के लिए Kafka (वैकल्पिक)
implementation "com.squareup.okhttp3:okhttp:4.12.0"
Picasso का डीबग इंडिकेटर प्रत्येक इमेज के कोने में एक रंगीन त्रिकोण दिखाता है: नेटवर्क लोडिंग के लिए लाल, डिस्क कैश के लिए नीला, मेमोरी कैश के लिए हरा। यह Picasso इंस्टेंस पर setIndicatorsEnabled(true) कॉल करके सक्रिय किया जाता है। डिफ़ॉल्ट कैश आकार डिवाइस की उपलब्ध मेमोरी का 15% है।
कस्टम Picasso इंस्टेंस कॉन्फ़िगर करने के लिए Picasso.Builder का उपयोग करें। यह बैकग्राउंड थ्रेड के लिए Executor, नेटवर्क अनुरोधों के लिए Downloader, MemoryCache और DiskCache सेट करने की अनुमति देता है। कस्टम इंस्टेंस विशेष रूप से परीक्षणों में उपयोगी है, जहाँ Downloader को एक स्टब से बदला जा सकता है जो नेटवर्क अनुरोध के बिना इमेज लौटाता है।
नीचे दिए गए उदाहरण Picasso के साथ काम करने के विशिष्ट परिदृश्यों को दर्शाते हैं: एक साधारण इमेज लोड करना, ट्रांसफ़ॉर्मेशन का उपयोग करना और RecyclerView में लोड करना।
ImageView में बेसिक लोडिंग एक ही कॉल से की जाती है। Picasso स्वचालित रूप से scaleType को ध्यान में रखते हुए इमेज को व्यू के आयामों में फ़िट करता है। लोडिंग पूरी होने तक प्लेसहोल्डर दिखाया जाता है, और कनेक्शन त्रुटि होने पर एरर इमेज दिखाई जाती है।
Picasso.get()
.load("https://example.com/photo.jpg")
.placeholder(R.drawable.loading)
.error(R.drawable.broken_image)
.fit()
.centerCrop()
.into(imageView)
BlurTransformation दिए गए रेडियस से इमेज को धुंधला करता है। कस्टम ट्रांसफ़ॉर्मेशन transform विधि के साथ Transformation इंटरफ़ेस को लागू करते हैं। कैश इसे पुन: लागू करने से बचने के लिए ट्रांसफ़ॉर्मेशन परिणाम को एक अद्वितीय कुंजी के तहत संग्रहीत करता है।
public class BlurTransformation implements Transformation {
@Override
public Bitmap transform(Bitmap source) {
Bitmap blurred = Bitmap.createBitmap(source);
RenderScript rs = RenderScript.create(context);
// ब्लर लागू करना
source.recycle();
return blurred;
}
@Override
public String key() {
return "blur";
}
}
RecyclerView में, Picasso स्वचालित रूप से उन ImageViews के लिए अनुरोध रद्द करता है जो स्क्रीन से बाहर स्क्रॉल हो गए हैं और पहले से लोड की गई इमेज का पुन: उपयोग करता है। यह मेमोरी लीक को रोकता है और स्मूथ स्क्रॉलिंग सुनिश्चित करता है।
public void onBindViewHolder(ViewHolder holder, int position) {
String url = items.get(position).getImageUrl();
Picasso.get()
.load(url)
.fit()
.centerCrop()
.into(holder.imageView);
}
Android के लिए इमेज लोडिंग लाइब्रेरी चुनते समय Picasso और Glide की तुलना एक सामान्य प्रश्न है। दोनों लाइब्रेरी एक ही कार्य को हल करती हैं लेकिन उनकी अलग-अलग प्राथमिकताएँ और उपयोग विशेषताएँ हैं।
Picasso उन प्रोजेक्ट के लिए बेहतर उपयुक्त है जहाँ सादगी और न्यूनतम APK आकार महत्वपूर्ण हैं। Glide को तब चुना जाता है जब GIF समर्थन, वीडियो फ्रेम और अधिकतम मेमोरी ऑप्टिमाइज़ेशन की आवश्यकता होती है। Glide स्वचालित रूप से इमेज को सटीक ImageView आकार में स्केल करता है, जो कुछ परिदृश्यों में Picasso की तुलना में मेमोरी खपत को 50% तक कम करता है।
प्रदर्शन परीक्षणों में, Glide अपने प्रीलोडिंग तंत्र और तेज़ स्क्रॉलिंग के दौरान स्वचालित अनुरोध रद्दीकरण के कारण RecyclerView के साथ काम करते समय बेहतर परिणाम दिखाता है। Picasso एक सरल रणनीति का उपयोग करता है, जो इसे पूर्वानुमानित बनाता है लेकिन बड़े डेटा वॉल्यूम पर कम कुशल।
Picasso API सादगी और न्यूनतम आकार पर ध्यान केंद्रित करता है। Glide व्यापक कार्यक्षमता प्रदान करता है: GIFs, एनिमेटेड इमेज, वीडियो फ्रेम और लाइफसाइकिल एकीकरण के लिए समर्थन। Glide ImageView आकार में स्वचालित स्केलिंग के कारण मेमोरी का अधिक कुशलता से प्रबंधन भी करता है।
| मापदंड | Picasso | Glide |
|---|---|---|
| लाइब्रेरी का आकार | ~120 KB | ~500 KB |
| GIF समर्थन | नहीं | हाँ |
| वीडियो फ्रेम | नहीं | हाँ |
| डेवलपर | Square | Google (Bumptech) |
| API | Fluent चेन | RequestBuilder |
Android Developer Relations के अनुसार, Google नए प्रोजेक्ट में इमेज लोडिंग के लिए Glide को पसंदीदा लाइब्रेरी के रूप में अनुशंसित करता है। Picasso सरल प्रोजेक्ट के लिए एक उत्कृष्ट विकल्प बना हुआ है जहाँ GIFs और वीडियो फ्रेम की आवश्यकता नहीं है।
अक्सर पूछे जाने वाले प्रश्न
Picasso आकार में छोटा और उपयोग में आसान है। Glide GIFs और वीडियो फ्रेम का समर्थन करता है, मेमोरी को अधिक कुशलता से प्रबंधित करता है और Google द्वारा अनुशंसित है। चुनाव अतिरिक्त प्रारूपों के लिए प्रोजेक्ट की आवश्यकता पर निर्भर करता है।
Picasso कैश साफ़ करने के लिए, एक इमेज के लिए Picasso.get().invalidate(url) विधि या पूर्ण सफाई के लिए shutdown() का उपयोग करें। डिस्क कैश ऐप को पुनः इंस्टॉल करने पर या सिस्टम सेटिंग्स के माध्यम से हटा दिया जाता है।
Picasso स्क्रीन रोटेशन पर निर्भर नहीं करता है। लोड की गई इमेज कैश में संग्रहीत रहती हैं और Activity के पुनः निर्माण पर उसी से प्रदर्शित होती हैं। गति बढ़ाने के लिए, लोड किए गए डेटा को संरक्षित करने के लिए Picasso के साथ ViewModel का उपयोग करें।
हाँ, Picasso Kotlin के साथ पूरी तरह से संगत है। Kotlin डेवलपर अधिक संक्षिप्त सिंटैक्स के लिए एक्सटेंशन फ़ंक्शन का उपयोग कर सकते हैं या इमेज लोड करते समय null मानों को संभालने के लिए koptional लाइब्रेरी लागू कर सकते हैं।
Picasso मेमोरी कैश के लिए LruCache का उपयोग करता है, स्वचालित रूप से अप्रयुक्त इमेज को साफ़ करता है। डिफ़ॉल्ट कैश आकार ऐप की उपलब्ध मेमोरी का 15% है। मेमोरी कम होने पर, Picasso onTrimMemory के माध्यम से संसाधनों को मुक्त करता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें