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 ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں