پیکاسو: چیست، بارگذاری تصاویر و کار در برنامه‌های اندروید

نویسنده: IT Sectr منتشر شده: 2026-05-05 زمان مطالعه: 8 دقیقه

پیکاسو کتابخانه‌ای برای بارگذاری تصاویر در برنامه‌های اندروید است که توسط شرکت Square توسعه یافته است. این کتابخانه API ساده و گویا برای بارگذاری، کش کردن و نمایش گرافیک از شبکه فراهم می‌کند. بر اساس آمار گیت‌هاب پیکاسو، این کتابخانه بیش از 100,000 بار دانلود شده است. پیکاسو به صورت خودکار حافظه را مدیریت کرده و تصاویر را در چند سطح کش می‌کند.

نکات اصلی

  • پیکاسو — کتابخانه بارگذاری تصاویر از Square با API ساده برای اندروید
  • کش کردن روی دیسک و در حافظه زمان بارگذاری تصاویر تکراری را کاهش می‌دهد
  • تبدیل‌ها Crop، Resize و Rotate به صورت لحظه‌ای روی تصاویر اعمال می‌شوند
  • Placeholder و تصاویر خطا در هنگام بارگذاری و هنگام خطا نمایش داده می‌شوند
  • اولویت‌های بارگذاری امکان مدیریت ترتیب نمایش تصاویر را فراهم می‌کنند

پیکاسو چیست؟

پیکاسو کتابخانه‌ای برای بارگذاری ناهمگام تصاویر در اندروید است که توسط شرکت Square ساخته شده است. نام خود را از هنرمند پابلو پیکاسو گرفته که فلسفه کتابخانه را منعکس می‌کند: تبدیل یک کار پیچیده به یک API ساده و زیبا. این محبوب‌ترین کتابخانه برای بارگذاری تصاویر در جامعه اندروید است.

معماری پیکاسو مینیمالیستی است: کتابخانه از یک استخر نخ برای بارگذاری، LruCache برای کش در حافظه و DiskLruCache برای کش دیسک استفاده می‌کند. برخلاف گلاید، پیکاسو نیازی به تنظیم AppGlideModule ندارد و بلافاصله پس از افزودن وابستگی آماده استفاده است. این使它 را به گزینه‌ای ایده‌آل برای نمونه‌های اولیه و پروژه‌های کوچک تبدیل می‌کند.

پیکاسو 2.8 — آخرین نسخه پایدار، سازگار با Android API 21+ و Java 8+. کتابخانه به تنظیمات پلاگین‌های Gradle یا حاشیه‌نویسی نیاز ندارد که مهاجرت بین نسخه‌ها را ساده کرده و خطر خطاها را در هنگام به‌روزرسانی کاهش می‌دهد. با وجود تاریخچه طولانی، پیکاسو همچنان در هزاران پروژه در سراسر جهان مورد استفاده قرار می‌گیرد.

وظیفه اصلی پیکاسو بارگذاری تصویر از URL، رمزگشایی آن، تغییر اندازه در صورت نیاز و نمایش در ImageView است. کتابخانه به طور خودکار نخ‌های پس‌زمینه، کش و استفاده مجدد از ImageView در لیست‌ها را مدیریت می‌کند.

از زمان انتشار در سال 2013، پیکاسو به استانداردی برای بارگذاری تصاویر در جامعه اندروید تبدیل شده است. این کتابخانه در هزاران برنامه به دلیل حداقل آستانه ورود استفاده می‌شود — برای اولین استفاده تنها یک خط کد کافی است.

اولویت‌ها و لغو درخواست‌ها

اولویت‌ها در پیکاسو امکان مدیریت ترتیب بارگذاری تصاویر را فراهم می‌کنند. به طور پیش‌فرض همه درخواست‌ها اولویت عادی دارند، اما برای تصاویر حیاتی می‌توان اولویت بالا را از طریق متد priority تنظیم کرد. اگر ImageView دوباره استفاده شود (مثلاً در RecyclerView)، پیکاسو به طور خودکار درخواست قبلی را لغو کرده و درخواست جدیدی را شروع می‌کند و از سوسو زدن تصاویر در هنگام اسکرول جلوگیری می‌کند.

ویژگی‌های اصلی پیکاسو

پیکاسو مجموعه‌ای از ویژگی‌ها را ارائه می‌دهد که سناریوهای اصلی کار با تصاویر در برنامه‌های موبایل را بدون پیچیدگی غیرضروری پوشش می‌دهد.

کش چندسطحی

کش پیکاسو از دو سطح تشکیل شده است: حافظه رم برای دسترسی سریع و دیسک برای ذخیره دائمی. هنگام درخواست تصویر، کتابخانه ابتدا کش حافظه، سپس دیسک و فقط پس از آن درخواست شبکه را بررسی می‌کند. این کار نمایش تصاویر بارگذاری شده مکرر را به طور قابل توجهی سرعت می‌بخشد.

تبدیل تصاویر

تبدیل‌ها امکان تغییر اندازه، برش یا چرخش تصویر را بدون رمزگشایی مجدد اصل هر بار فراهم می‌کنند. پیکاسو تبدیل‌های داخلی CenterCrop و CenterInside را ارائه می‌دهد و همچنین امکان ایجاد تبدیل‌های سفارشی را از طریق رابط Transformation فراهم می‌کند. تصاویر تبدیل شده به طور جداگانه کش می‌شوند.

Placeholder و تصاویر خطا

Placeholder در هنگام بارگذاری تصویر از شبکه نمایش داده می‌شود و به کاربر بازخورد بصری می‌دهد. تصویر خطا در هنگام شکست بارگذاری نشان داده می‌شود. پیکاسو همچنین تصویری را پشتیبانی می‌کند که تا زمانی که نسخه جدید بارگذاری نشده نمایش داده می‌شود، که برای آواتارهای قابل به‌روزرسانی مفید است.

بارگذاری از منابع مختلف

پیکاسو از بارگذاری تصاویر از URL، منابع، فایل‌ها، ارائه‌دهندگان محتوا و URI پشتیبانی می‌کند. متد load() برای همه این انواع بارگذاری شده است و کتابخانه به طور خودکار منبع را تشخیص می‌دهد. برای منابع و فایل‌ها، پیکاسو درخواست شبکه انجام نمی‌دهد و داده‌ها را مستقیماً بارگذاری می‌کند که نمایش گرافیک داخلی را سرعت می‌بخشد.

پیکاسو چگونه کار می‌کند؟

پیکاسو از معماری مبتنی بر RequestCreator و Dispatcher استفاده می‌کند. هر درخواست از طریق Picasso.get().load() ایجاد شده و در یک استخر نخ اجرا می‌شود. Dispatcher صف درخواست‌ها، اولویت‌ها و لغو درخواست‌ها را در هنگام استفاده مجدد از ImageView مدیریت می‌کند.

معماری درخواست

هنگام فراخوانی into(view)، پیکاسو یک شی Action ایجاد می‌کند که شامل URL، تبدیل‌ها، target و callback است. Action در صف Dispatcher قرار می‌گیرد. موتور تصویر را از طریق Downloader (پیش‌فرض OkHttp) بارگذاری می‌کند، Bitmap را رمزگشایی می‌کند، تبدیل‌ها را اعمال می‌کند و نتیجه را به نخ UI بازمی‌گرداند. همه تصاویر به طور خودکار با اندازه ImageView تطبیق داده می‌شوند.

java
Picasso.get()
    .load("https://example.com/image.jpg")
    .placeholder(R.drawable.placeholder)
    .error(R.drawable.error)
    .resize(400, 300)
    .centerCrop()
    .into(imageView)

نصب و تنظیم پیکاسو

نصب پیکاسو از طریق Gradle انجام می‌شود. کتابخانه از طریق Maven Central منتشر می‌شود و نیازی به تنظیمات پیچیده ندارد. حداقل نسخه Android API 21 است.

افزودن وابستگی

در فایل build.gradle سطح ماژول، implementation 'com.squareup.picasso:picasso:2.8' را اضافه کنید. پس از همگام‌سازی Gradle، پیکاسو آماده استفاده است. برای کار با شبکه، پیکاسو به طور خودکار از OkHttp در صورت وجود در پروژه، یا HttpURLConnection داخلی استفاده می‌کند.

groovy
dependencies {
    implementation "com.squareup.picasso:picasso:2.8"
}

// Kafka برای بارگذاری از OkHttp (اختیاری)
implementation "com.squareup.okhttp3:okhttp:4.12.0"

نشانگر اشکال‌زدایی و کش

نشانگر اشکال‌زدایی پیکاسو یک مثلث رنگی در گوشه هر تصویر نشان می‌دهد: قرمز برای بارگذاری شبکه، آبی برای کش دیسک، سبز برای کش حافظه. با فراخوانی setIndicatorsEnabled(true) روی نمونه پیکاسو فعال می‌شود. کش پیش‌فرض 15% از حافظه قابل دسترس دستگاه است.

برای تنظیم یک نمونه سفارشی پیکاسو از Picasso.Builder استفاده کنید. این امکان تنظیم Executor برای نخ‌های پس‌زمینه، Downloader برای درخواست‌های شبکه، MemoryCache و DiskCache را فراهم می‌کند. نمونه سفارشی به ویژه در آزمایش‌ها مفید است، جایی که می‌توان Downloader را با یک stub جایگزین کرد که تصویر را بدون درخواست شبکه برمی‌گرداند.

نمونه‌های استفاده از پیکاسو

نمونه‌های زیر سناریوهای معمول کار با پیکاسو را نشان می‌دهند: بارگذاری یک تصویر ساده، استفاده از تبدیل‌ها و بارگذاری در RecyclerView.

بارگذاری تصویر در ImageView

بارگذاری پایه در ImageView با یک فراخوانی انجام می‌شود. پیکاسو به طور خودکار تصویر را با توجه به scaleType با ابعاد view تطبیق می‌دهد. Placeholder تا پایان بارگذاری و error در هنگام خطای اتصال نشان داده می‌شود.

java
Picasso.get()
    .load("https://example.com/photo.jpg")
    .placeholder(R.drawable.loading)
    .error(R.drawable.broken_image)
    .fit()
    .centerCrop()
    .into(imageView)

اعمال تبدیل سفارشی

تبدیل BlurTransformation تصویر را با شعاع مشخص تار می‌کند. تبدیل‌های سفارشی رابط Transformation را با متد transform پیاده‌سازی می‌کنند. کش نتیجه تبدیل را تحت یک کلید منحصربه‌فرد ذخیره می‌کند تا دوباره اعمال نشود.

java
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

در RecyclerView، پیکاسو به طور خودکار درخواست‌ها را برای ImageViewهایی که از صفحه خارج شده‌اند لغو می‌کند و از تصاویر بارگذاری شده قبلی استفاده مجدد می‌کند. این کار از نشت حافظه جلوگیری کرده و اسکرول روان را تضمین می‌کند.

java
public void onBindViewHolder(ViewHolder holder, int position) {
    String url = items.get(position).getImageUrl();
    Picasso.get()
        .load(url)
        .fit()
        .centerCrop()
        .into(holder.imageView);
}

پیکاسو یا گلاید: مقایسه کتابخانه‌ها

مقایسه پیکاسو و گلاید یک سوال رایج هنگام انتخاب کتابخانه بارگذاری تصاویر در اندروید است. هر دو کتابخانه یک کار را حل می‌کنند اما اولویت‌ها و ویژگی‌های استفاده متفاوتی دارند.

پیکاسو برای پروژه‌هایی مناسب‌تر است که سادگی و حداقل حجم APK مهم است. گلاید زمانی انتخاب می‌شود که نیاز به پشتیبانی از GIF، فریم‌های ویدیویی و بهینه‌سازی حداکثر حافظه باشد. گلاید به طور خودکار تصویر را به اندازه دقیق ImageView مقیاس می‌کند که مصرف حافظه را تا 50% در مقایسه با پیکاسو در برخی سناریوها کاهش می‌دهد.

بر اساس آزمایش‌های عملکرد، گلاید نتایج بهتری در کار با RecyclerView به دلیل مکانیزم پیش‌بارگذاری و لغو خودکار درخواست‌ها در اسکرول سریع نشان می‌دهد. پیکاسو از استراتژی ساده‌تری استفاده می‌کند که آن را قابل پیش‌بینی اما در حجم‌های بزرگ داده کمتر کارآمد می‌کند.

پیکاسو بر سادگی API و حداقل حجم تمرکز دارد. گلاید عملکرد وسیع‌تری ارائه می‌دهد: پشتیبانی از GIF، تصاویر متحرک، فریم‌های ویدیویی و یکپارچه‌سازی با چرخه حیات. گلاید همچنین به دلیل مقیاس‌بندی خودکار به اندازه ImageView حافظه را کارآمدتر مدیریت می‌کند.

معیارپیکاسوگلاید
حجم کتابخانه~120 KB~500 KB
پشتیبانی از GIFخیربله
فریم‌های ویدیوییخیربله
توسعه‌دهندهSquareGoogle (Bumptech)
APIزنجیره FluentRequestBuilder

بر اساس اطلاعات Android Developer Relations، گلاید توسط Google به عنوان کتابخانه ترجیحی برای بارگذاری تصاویر در پروژه‌های جدید توصیه می‌شود. پیکاسو انتخاب عالی برای پروژه‌های ساده‌ای باقی می‌ماند که نیازی به GIF و فریم‌های ویدیویی ندارند.

سوالات متداول

تفاوت پیکاسو با گلاید چیست؟

پیکاسو حجم کمتری دارد و استفاده از آن ساده‌تر است. گلاید از GIF و فریم‌های ویدیویی پشتیبانی می‌کند، حافظه را کارآمدتر مدیریت می‌کند و توسط Google توصیه می‌شود. انتخاب بستگی به نیاز پروژه به فرمت‌های اضافی دارد.

چگونه کش پیکاسو را پاک کنیم؟

برای پاک کردن کش پیکاسو از متد Picasso.get().invalidate(url) برای یک تصویر یا shutdown() برای پاک کردن کامل استفاده کنید. کش دیسک با نصب مجدد برنامه یا از طریق تنظیمات سیستم پاک می‌شود.

پیکاسو چگونه چرخش صفحه را مدیریت می‌کند؟

پیکاسو به چرخش صفحه وابسته نیست. تصاویر بارگذاری شده در کش ذخیره شده و در هنگام بازسازی Activity از آن نمایش داده می‌شوند. برای سرعت بخشیدن، از ViewModel به همراه پیکاسو برای ذخیره داده‌های بارگذاری شده استفاده کنید.

آیا می‌توان از پیکاسو در کاتلین استفاده کرد؟

بله، پیکاسو کاملاً با کاتلین سازگار است. توسعه‌دهندگان کاتلین می‌توانند از توابع توسعه‌دهنده برای نحو خلاصه‌تر استفاده کنند یا کتابخانه koptional را برای مدیریت مقادیر null در بارگذاری تصاویر به کار ببرند.

پیکاسو چگونه حافظه را مدیریت می‌کند؟

پیکاسو از LruCache برای کش در حافظه استفاده می‌کند و تصاویر استفاده نشده را به طور خودکار پاک می‌کند. اندازه پیش‌فرض کش 15% از حافظه قابل دسترس برنامه است. در کمبود حافظه، پیکاسو منابع را از طریق onTrimMemory آزاد می‌کند.

خلاصه

  • پیکاسو — کتابخانه سبک بارگذاری تصاویر از Square با API حداقلی
  • کش کردن روی دیسک و در حافظه با مدیریت خودکار اندازه
  • تبدیل‌ها CenterCrop، CenterInside و سفارشی از طریق رابط Transformation
  • Placeholder و تصاویر خطا برای تجربه کاربری روان
  • لغو خودکار درخواست‌ها در RecyclerView از بارگذاری‌های اضافی جلوگیری می‌کند
  • نشانگر اشکال‌زدایی به تعیین بصری منبع تصویر کمک می‌کند
  • حجم کتابخانه فقط 120 KB — تأثیر حداقلی بر حجم APK

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید