Picassoは、Square社が開発したAndroidアプリケーションで画像を読み込むためのライブラリです。シンプルで表現力豊かなAPIを提供し、ネットワークからのグラフィックの読み込み、キャッシュ、表示を容易にします。PicassoのGitHub統計によると、このライブラリは10万回以上ダウンロードされています。Picassoはメモリを自動管理し、複数レベルで画像をキャッシュします。
重要ポイント
Picassoは、Square社が作成したAndroid向け非同期画像読み込みライブラリです。芸術家パブロ・ピカソにちなんで名付けられ、複雑なタスクをシンプルでエレガントな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コミュニティにおける画像読み込みの標準となりました。最小限の参入障壁(初回使用にコード1行のみ)により、何千ものアプリケーションで使用されています。
Picassoの優先度機能により、画像の読み込み順序を管理できます。デフォルトでは全てのリクエストは通常優先度ですが、重要な画像にはpriorityメソッドで高優先度を設定できます。ImageViewが再利用される場合(例:RecyclerView)、Picassoは自動的に前のリクエストをキャンセルして新しいリクエストを開始し、スクロール時の画像のちらつきを防ぎます。
Picassoは、モバイルアプリケーションでの画像操作の主要なシナリオを余計な複雑さなくカバーする機能セットを提供します。
Picassoのキャッシュは、高速アクセス用のRAMと永続ストレージ用のディスクの2つのレベルで構成されています。画像リクエスト時、ライブラリはまずメモリキャッシュ、次にディスクキャッシュを確認し、その後でのみネットワークリクエストを実行します。これにより、繰り返し読み込まれる画像の表示が大幅に高速化されます。
変換機能により、毎回オリジナルをデコードすることなく、画像のサイズ変更、切り抜き、回転が可能です。Picassoはビルトイン変換のCenterCropとCenterInsideを提供し、Transformationインターフェースを通じてカスタム変換も作成できます。変換された画像は個別にキャッシュされます。
プレースホルダーはネットワークから画像を読み込んでいる間表示され、ユーザーに視覚的なフィードバックを提供します。読み込みに失敗した場合はエラー画像が表示されます。Picassoは、新しいバージョンが読み込まれるまで表示される画像もサポートしており、更新可能なアバターなどに便利です。
Picassoは、URL、リソース、ファイル、コンテンツプロバイダー、URIからの画像読み込みをサポートしています。load()メソッドはこれら全てのタイプでオーバーロードされており、ライブラリが自動的にソースを判別します。リソースとファイルの場合、Picassoはネットワークリクエストを行わず直接データを読み込むため、内蔵グラフィックの表示が高速化されます。
PicassoはRequestCreatorとDispatcherに基づくアーキテクチャを使用しています。各リクエストはPicasso.get().load()で作成され、スレッドプールで実行されます。Dispatcherはリクエストキュー、優先度、ImageView再利用時のキャンセルを管理します。
into(view)を呼び出すと、PicassoはURL、変換、ターゲット、コールバックを含むActionオブジェクトを作成します。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への基本的な読み込みは1回の呼び出しで行えます。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は画面外にスクロールしたImageViewのリクエストを自動的にキャンセルし、既に読み込まれた画像を再利用します。これによりメモリリークを防ぎ、スムーズなスクロールを実現します。
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はより広範な機能(GIF、アニメーション画像、ビデオフレーム、ライフサイクル統合のサポート)を提供します。GlideはImageViewサイズへの自動スケーリングにより、メモリもより効率的に管理します。
| 基準 | Picasso | Glide |
|---|---|---|
| ライブラリサイズ | ~120 KB | ~500 KB |
| GIFサポート | いいえ | はい |
| ビデオフレーム | いいえ | はい |
| 開発元 | Square | Google(Bumptech) |
| API | Fluentチェーン | RequestBuilder |
Android Developer Relationsによると、Googleは新しいプロジェクトでの画像読み込みにGlideを推奨ライブラリとして推奨しています。PicassoはGIFやビデオフレームが不要なシンプルなプロジェクトには優れた選択肢であり続けています。
よくある質問
Picassoはサイズが小さく、使い方が簡単です。GlideはGIFやビデオフレームをサポートし、メモリをより効率的に管理し、Googleから推奨されています。選択は追加フォーマットに対するプロジェクトの要件によります。
Picassoのキャッシュをクリアするには、1枚の画像にはPicasso.get().invalidate(url)メソッドを、完全クリアにはshutdown()を使用します。ディスクキャッシュはアプリの再インストール時またはシステム設定から削除されます。
Picassoは画面回転に依存しません。読み込まれた画像はキャッシュに保存され、Activityの再作成時にそこから表示されます。高速化には、PicassoとViewModelを併用して読み込まれたデータを保持してください。
はい、PicassoはKotlinと完全に互換性があります。Kotlin開発者は拡張関数を使用してより簡潔な構文を実現したり、画像読み込み時のnull値処理にkoptionalライブラリを適用したりできます。
PicassoはメモリキャッシュにLruCacheを使用し、未使用の画像を自動的にクリアします。デフォルトのキャッシュサイズはアプリの利用可能メモリの15%です。メモリが不足すると、PicassoはonTrimMemoryを介してリソースを解放します。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。