为什么使用Android Picasso库下载图像?

时间:2014-03-11 16:30:11

标签: android image picasso

为什么我应该通过Picasso库下载图像而不是仅使用此代码:

private Bitmap DownloadImage(String URL) 
{
    Bitmap bitmap = null; 
    InputStream in = null; 

    try 
    {
        in = OpenHttpGETConnection(URL);
        bitmap = BitmapFactory.decodeStream(in); in.close();
    } 
    catch (Exception e) 
    {
        Log.d("DownloadImage", e.getLocalizedMessage());
    }

    return bitmap; 
}

另一个问题:

Picasso是在UI中还是通过后台线程下载图像?

9 个答案:

答案 0 :(得分:99)

仅适用于Android新手或者从iOS移动到Android的任何人的记录..........

直到某些事情发生巨大变化,你绝对必须使用毕加索。不是开玩笑。

老实说,就这么简单。优点令人难以置信。

这很容易使用:

Picasso.
  with(State.mainContext).
  load(parseImageFile.getUrl()).
  into(null);

你很简单:

必须在Android上使用图像处理进行缓存和线程化。

就这么简单。除非您想从头开始编写,否则您只需使用Picasso。

请注意, ParseImageFile 基本上不起作用 - 它对缓存等完全没用。 Picasso有很多令人钦佩的替代品(例如Universal Image Loader,请查看),但是现在2014年没有像Picasso那样有效。

注意如果你转向超高级的东西...... 唯一比毕加索更好的就是转向Volley。但这是一个巨大的飞跃。

请注意,在Android上滚动ListView比在iOS上滚动表格要困难得多。你可以说,Android + Picasso更像iOS上的情况,在这里已经完成了用图像滚动大型表视图的所有工作。

今天,毕加索只是 - 任何Android应用程序的核心部分。谢天谢地,这是一行代码 - 没有设置,没有。

再次,唯一的事情"比#34;更好毕加索是你搬到Volley的。

如果你需要的话,BTW这里有一篇关于Volley v.Picasso的精彩长篇文章......

http://www.bignerdranch.com/blog/solving-the-android-image-loading-problem-volley-vs-picasso/

答案 1 :(得分:35)

Picasso在另一个帖子中下载图片并为您管理:

  • 占位符同时图像仍在下载
  • 调整大小
  • 裁剪/定心/缩放
  • 缓存(您不必每次都下载图像)
  • 它甚至可以“图像淡入”,现在很流行/正常

这非常简单,这是一个例子:

    Picasso.with(context)
           .load(url)
           .placeholder(R.drawable.placeholder)
           .resize(imgWidth, imgHeight)
           .centerCrop()
           .into(image);

答案 2 :(得分:12)

我总是使用 Picasso Library 来制作图像。
它对于管理图像非常有用,而且不用担心内存问题。
当我'从服务器或json下载图像,我用

Picasso.with(context).load("image url").into(ImageView);

我将该图片网址存储到数据库或其他地方 现在我们可以在任何地方使用该图像(也可以离线)。

unique_ptr

答案 3 :(得分:5)

Picasso.with(this).load("http://webneel.com/wallpaper/sites/default/files/images/04-2013/island-beach-scenery-wallpaper.jpg").placeholder(R.mipmap.ic_launcher).fit().into(imageView,
  new Callback() {@
    Override
    public void onSuccess() {}@
    Override
    public void onError() {}
  });

您应该通过Picasso库下载图像,原因如下:

  1. 您可以放置​​一个占位符,以防图像需要一些时间来加载。
  2. fit() - 由于尺寸的原因,有时某些图片无法在imageview中加载。此方法将帮助您加载大图像。
  3. onSuccess() - 您可以在图片成功加载时执行某些操作。
  4. onError() - 您可以在加载图片时遇到问题时执行某些操作。

答案 4 :(得分:2)

您应该使用像Picasso,Volley或Universal Image Loader这样的图像加载器库,因为它们执行以下代码无法执行的操作:

  • 高效的多线程网络(当然是在后台线程上)
  • 将多个相同的请求合并为一个网络电话
  • 取消待处理的请求,尤其是在ListView项目回收期间
  • 使用各种过期策略进行磁盘和内存缓存
  • 图像下采样到目标视图大小以提高性能并减少内存使用
  • 批量处理UI更新以提高UI响应能力(至少对于Volley和Picasso而言)。

顺便说一下,你必须永远不要在UI线程上执行网络请求,因为HoneyComb,Android不允许你这样做。

答案 5 :(得分:2)

我知道Picasso是一个用于管理ListView和GridView中图像的绝佳库,但在包括Picasso在内的所有选项中,我使用了GLIDE ......

它真正管理下载&完美缓存......(我无法让Picasso在下载完成后使用缓存图像但Glide就像一块蛋糕一样)。

以下是GLIDE的Github页面:

https://github.com/bumptech/glide

...问候

答案 6 :(得分:2)

如果您将使用从网络加载图像的核心方法,那么将需要更多的代码。但是如果我们使用像毕加索这样的第三方图书馆,那么我们将在几行代码中实现我们的目标 而毕加索图书馆是迄今为止我发现的最好和最简单的图书馆。 我们只需编写以下内容即可使用毕加索从互联网加载图像。

Picasso.with(this)
.load("YOUR IMAGE URL HERE")
.placeholder(Your Drawable Resource) //this is optional the image to display while the url image is downloading
.error(Your Drawable Resource)         //this is also optional if some error has occurred in downloading the image this image would be displayed
.into(imageView);

但是如果我们不使用picasso库或任何其他库,我们可能需要使用需要更多代码行的AsyncTask来完成它。

来源:Picasso Android Tutorial

答案 7 :(得分:0)

请在build.gradle(Module:app)

中添加以下依赖项
compile 'com.github.bumptech.glide:glide:3.6.1'

答案 8 :(得分:0)

Picasso自动处理与图像下载相关的所有陷阱,例如缓存下载的图像,查找缓存,取消现有请求,执行图像转换和解码,调整图像大小和裁剪。

它允许您自定义它,您可以为缓存配置内存,添加用于向每个请求添加全局信息的请求转换器,添加位图配置以处理默认位图配置未涵盖的格式的解码图像。

它允许您指定内存策略和网络策略,使其可以使用缓存或从网络下载。它允许您添加占位符和错误图像,以便在下载时使用,并且在下载时分别出错。

Picasso在工作线程上异步下载图像。

以下是使用Picasso最新版本2.71828将图像加载到工作线程上的ImageView的代码。

Picasso.get().load(productImageUrl).into(imageView);

下面的代码调整大小并裁剪图像。

有关信息,请参阅http://www.zoftino.com/android-picasso-image-downloading-and-caching-library-tutorial。     。Picasso.get()负载(productImageUrl).resize(400400).centerCrop()代入(ImageView的);