ピカソVSグライド



Picasso Vs Glide



元の: グーグルが推奨するAndroid用画像ローダーライブラリ、Glideの紹介

タイで開催されたGoogleDeveloper Forumで、Googleから名前が紹介されました。 グライド 写真はライブラリをロードします。作者はbumptechです。このライブラリは、2014年のGoogle I / O会議でリリースされた公式アプリなど、Googleのオープンソースプロジェクトで広く使用されています。



彼の成功は私を非常に興味深くさせました。私は一晩遊んで過ごし、自分の経験のいくつかを共有することにしました。始める前に、グライドとピカソは90%似ていると言いたいのですが、正確には、ピカソのクローンバージョンです。しかし、細部にはまだかなりの違いがあります。

ライブラリをインポートする

ピカソとグライドの両方がjcenterにあります。プロジェクトに依存関係を追加するのは簡単です。



ピカソ

RGB_565

グライド

ARGB_8888

グライドは頼る必要があります サポートライブラリv4 、忘れないで。実際には サポートライブラリv4 すでにアプリケーションの標準ですが、これは問題ではありません。



基礎

私が言ったように、グライドはピカソに非常に似ています。グライドはピカソと同じ方法で画像をロードします。

ピカソ

RGB_565

グライド

GlideModule

2つは同じように見えますが、GlideのwithメソッドはContextを受け入れるだけでなく、ActivityとFragmentも受け入れることができるため、Glideの方が使いやすく、Contextはそれらから自動的に取得されます。

同時に、with()パラメータとしてのActivity / Fragmentの利点は、画像の読み込みがActivity / Fragmentのライフサイクルと一致することです。たとえば、一時停止状態は一時停止され、再開時に自動的に再ロードされます。したがって、コンテキストではなくアクティビティとフラグメントをグライドに渡すことをお勧めします。

グライドのデフォルトのビットマップ形式はRGB_565です

これは、画像をロードするときのピカソとの比較です(1920x1080ピクセルの画像が768x432 ImageViewにロードされます)

グライドによってロードされた画像の品質がピカソよりも悪いことがわかります。どうして?これは、Glideのデフォルトのビットマップ形式がARGB_8888 Than AndroidManifest.xml形式のメモリオーバーヘッドが半分であるためです。以下は、ARGB8888でのピカソとRGB565でのグライドのメモリコスト図です(アプリケーション自体は8mを占めるため、ベースラインとして8と比較してください)。

デフォルトに反している場合GlideModule効果は非常に満足のいくものであり、何もできませんが、許容できない場合は、新しいものを作成できます。meta-dataビットマップ形式を

dependencies { compile 'com.squareup.picasso:picasso:2.5.1' } 
に変換します。 ::

dependencies { compile 'com.github.bumptech.glide:glide:3.5.2' compile 'com.android.support:support-v4:22.0.0' } 

同時に

Picasso.with(context) .load('http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg') .into(ivImg)
中尉
Glide.with(context) .load('http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg') .into(ivImg)
定義
public class GlideConfiguration implements GlideModule { @Override public void applyOptions(Context context, GlideBuilder builder) { // Apply options to the builder here.   builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888) } @Override public void registerComponents(Context context, Glide glide) { // register ModelLoaders here.   } } 

<meta-data android:name='com.inthecheesefactory.lab.glidepicasso.GlideConfiguration' android:value='GlideModule'/>

これはずっと良く見えるでしょう。

メモリオーバーヘッドグラフを見てみましょう。このグライドのメモリオーバーヘッドは前回のほぼ2倍のようですが、ピカソのメモリオーバーヘッドはグライドよりもはるかに大きいです。

ただし、上記の問題は、ImageViewのサイズを手動で計算する必要があるか、ImageViewの特定のサイズを設定していることです。この種の問題を解決するには、次のようにしてピカソのコードを簡略化します。

Picasso.with(this) .load('http://nuuneoi.com/uploads/source/playstore/cover.jpg') .resize(768, 432) .into(ivImgPicasso)

ただし、問題は、ImageViewのサイズをアクティブに計算する必要があること、またはImageViewのサイズが(wrap_contentではなく)特定の値であるということです。これを行うこともできます。

Picasso.with(this) .load('http://nuuneoi.com/uploads/source/playstore/cover.jpg') .fit() .centerCrop() .into(ivImgPicasso)

現在、ピカソのメモリオーバーヘッドはグライドとほぼ同じです。

メモリのオーバーヘッドに大きな違いはありませんが、この問題でグライドはピカソを打ち負かしました。 Glideは、どのような場合でもImageViewサイズを自動的に計算できるためです。

画質の詳細

これは、ImageViewを実際のサイズに復元するときの比較です。

明らかに、グライドによってロードされたピクセルのいくつかはぼやけており、ピカソと同じくらい滑らかに見えます。そして今まで、画像のサイズ変更アルゴリズムを視覚的に変更する方法を見つけていませんでした。

しかし、これは検出が難しいため、悪いことではありません。

ディスクキャッシュ

ピカソとグライドは、ディスクキャッシュ戦略が大きく異なります。グライドとピカソを使用して同じHD画像をロードする実験を行いました。実験後にキャッシュディレクトリを確認したところ、次のことがわかりました。Glideが画像をキャッシュし、ImageViewが同じサイズであるのに対し、Picassoは元の画像と同じ画像をキャッシュしました。

上記の滑らかさの問題は依然として存在し、RGB565画像がロードされると、キャッシュ内の画像もRGB565になります。

ImageViewを別のサイズに調整しようとしましたが、ピカソはサイズに関係なくフルサイズしかキャッシュしません。グライドは異なり、ImageViewのサイズごとに1回キャッシュされます。画像は一度キャッシュされていますが、別の場所に別のサイズで表示する場合は、画像を再ダウンロードし(ps:これはトラフィックを消費します)、新しいサイズのサイズに調整してから、これをキャッシュする必要がありますサイズ。立ち上がる。

具体的には、最初のページに200x200 ImageViewがあり、2番目のページに100x100 ImageViewがある場合、2つのImageViewは同じ画像を表示する必要がありますが、2回ダウンロードする必要があります。ただし、この動作を変更して、Glideがフルサイズと他のサイズの両方をキャッシュするようにすることができます。

Glide.with(this) .load('http://nuuneoi.com/uploads/source/playstore/cover.jpg') .diskCacheStrategy(DiskCacheStrategy.ALL) .into(ivImgGlide)

次回ImageViewに画像をロードすると、フルサイズの画像がキャッシュから取得され、サイズが変更されてからキャッシュされます。

ピカソとグライドにはディスクキャッシング戦略に独自の利点があり、ニーズに応じて最も適切なものを選択する必要があります。

私にとっては、キャッシュに多くのスペースが必要ですが、ピカソよりもはるかに高速であるため、グライドが好きです。

このグライドの方法の利点は、読み込み表示が非常に高速であることです。ピカソのアプローチでは、このコードを追加してすぐに表示する場合でも、表示する前にサイズを変更する必要があるため、遅延が発生します。

//Picasso .noFade()

ピカソとグライドにはディスクキャッシング戦略に独自の利点があり、ニーズに応じて最も適切なものを選択する必要があります。

私にとっては、キャッシュに多くのスペースが必要ですが、ピカソよりもはるかに高速であるため、グライドが好きです。

特性

ピカソとほぼ同じことができ、コードもほぼ同じです。

画像のサイズ変更

// Picasso .resize(300, 200) // Glide .override(300, 200)

センタートリミング

// Picasso .centerCrop() // Glide .centerCrop()

変身

// Picasso .transform(new CircleTransform()) // Glide .transform(new CircleTransform(context))

プレースホルダーとエラー画像の設定

// Picasso .placeholder(R.drawable.placeholder) .error(R.drawable.imagenotfound) // Glide .placeholder(R.drawable.placeholder) .error(R.drawable.imagenotfound)

ブログ投稿の冒頭で述べたように、ピカソの使用方法に既に精通している場合は、ピカソからグライドに切り替えるのは簡単です。

グライドができることとピカソができないこと

グライドはGIFダイナミックマップをロードできますが、ピカソはロードできません。

同時に、グライドとアクティビティ/フラグメントのライフサイクルは同じであるため、gifのアニメーションは自動的に一時停止し、アクティビティ/フラグメントの状態で再生されます。 Glideのキャッシュは、ここgifでも同じで、サイズを変更してからキャッシュします。

しかし、私のテスト結果から、Glideでアニメーションを表示すると多くのメモリを消費するため、注意して使用してください。

gifアニメーションに加えて、Glideはローカルビデオを静止画像にデコードすることもできます。

もう1つの機能は、画像表示のアニメーションを構成できることですが、ピカソにはフェードインという1つのアニメーションしかありません。

最後の方法は、thumbnail()を使用して、ロードした画像のサムネイルを生成することです。

実際にはいくつかの機能がありますが、画像をバイト配列に変換するなど、それほど重要ではありません。構成

サイズ、キャッシュされたディスクの場所、最大キャッシュスペース、ビットマップ形式など、構成できるオプションは多数あります。これらの構成設定は、このページで確認できます。

ライブラリのサイズ

ピカソ(v2.5.1)のサイズは約118kbですが、グライド(v3.5.2)のサイズは約430kbです。

しかし、312kbのギャップはそれほど重要ではありません。

ピカソとグライドのメソッドの数は、それぞれ840と2678です。

2678は、DEXファイルの65535メソッドの制限に対してかなり大きな数値であることに注意する必要があります。 Glideを使用するときは、ProGuardをオンにすることをお勧めします。

総括する

グライドとピカソはどちらも完璧なライブラリです。 GlideはPicassoよりも高速に画像とディスクキャッシュをロードし、GlideはOutOfMemoryErrorの発生を減らすのに役立ちます。 GIFアニメーションはグライドのキラーです。ただし、ピカソの写真は高品質です。あなたはどちらを好みますか?

私は長い間ピカソを使ってきましたが、今はグライドが好きだということを認めなければなりません。私の提案はGlideを使用することですが、ビットマップ形式をARGB_8888に置き換え、Glideにフルサイズとサイズの両方をキャッシュさせます。

資源

グライドに関するオンラインリソースはそれほど多くありません。しかし、ここに私が見つけたもののいくつかがあります、あなたは以下のリンクを訪問することができます。

- Glide 3.0:Android用のメディア管理ライブラリ

- グライドウィキ

- Android Picasso vs Glide

- Android:画像読み込みライブラリPicasso vs Glide

- グライドスムーズなスクロールに焦点を当てた画像読み込みライブラリとキャッシュライブラリ

転載:https://www.cnblogs.com/sihaixuan/p/4853233.html