毕加索从文件系统加载图像


76

我可以使用Picasso库从文件系统加载图像吗?

startActivityForResult用来让用户从他的画廊中挑选一张照片,然后想要显示所选的图像。

我已经有工作代码来获取图像文件系统Uri,但是无法使该Picasso.load()方法工作。

Answers:


155

当然可以。实际上非常简单:

File f = new File("path-to-file/file.png");

要么

File f = new File(uri);

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

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

作品


8
我不知道Picasso是否需要从文件系统加载图像的“特定” URI格式(字符串格式)。但是我使用了从ActivityResult返回的那个,直到我传递一个File对象而不是直接传递String,它才起作用。
Gonan

6
我正在尝试执行此操作,但是此操作不起作用,我将另一个活动中的文件保存到我的应用程序缓存中,但毕加索未加载该文件……
Loenix

1
patrickf的答案的伎俩,然而,由于毕加索已经改变了一点,因为答案被张贴,你需要使用以下语法: Picasso.get().load(f).into(imageView); 或者 Picasso.get().load(uri).into(imageView); 或者 Picasso.get().load("http://i.imgur.com/DvpvklR.png").into(imageView);
汤姆Larcher的

27

是的你可以。

尝试:

Picasso.with(context).load(new File(YOUR_FILE_PATH)).into(imageView);

编辑

您也可以拨打电话.load(YOUR_URI)


23

通过查看源代码,我还发现您可以从文件系统加载图像,并file:在图像路径中添加字符串前缀。例如:

file:path/to/your/image

另外,在使用startActivityForResult时,您将获得如下内容:

Uri imageContent = data.getData();

然后,您可以Picasso.with(getContext()).load(imageContent.toString).into(imageView);直接调用而无需创建Cursor和查询图像路径。


3
谢谢,我的工作直到我看到您的答案是需要“ file:”前缀才起作用。
henry000dev

我不知道为什么它不起作用。我的路径是-“文件:/storage/emulated/0/Android/data/com.fittingroom.newtimezone/files/default/AvatarPackage/DEFAULT_MY_AVATAR/pose1.jpeg”,但有任何结果(
Aleksey Timoshchenko

1
@AlekseyTimoshchenko应该以开头file://。您的Uri缺少第二个/
苏菲安

9

试试这个:

Picasso.with(context)
.load("file://"+path) // Add this
.config(Bitmap.Config.RGB_565)
.fit().centerCrop()
.into(imageView);

它对我来说很完美。


嗯,我会使用RGB_8888,除非由于图像很大而导致内存限制问题
Zharf

6
> Picasso.get().load(R.drawable.landing_screen).into(imageView1);
> Picasso.get().load("file:///android_asset/DvpvklR.png").into(imageView2);
> Picasso.get().load(new File(...)).into(imageView3);

这是使用新版本的毕加索实现的方法。Picasso.with()不再被提供。
Inn0vative18年

2

基本上,我们需要三件事Contextimage´s path以及ImageView容器

//Old version: Picasso.with(context).load("/files/my_image.jpg").into(myImageView);

 Picasso.get().load("/files/my_image.jpg").into(myImageView);

但是我们可以使用更多选项:

  .resize(20, 20)
  .centerCrop()
  .placeholder(R.drawable.user_placeholder)
  .error(R.drawable.user_placeholder_error)

等等...

更多信息:http : //square.github.io/picasso/


0

如果有人试图用Kotlin做到这一点,那就是...

//变量

private lateinit var addImage: ImageView  // set the id of your ImageView
private lateinit var imageUri: Uri

//打开图库以选择图片

val gallery = Intent()
        gallery.type = "image/*"
        gallery.action = Intent.ACTION_GET_CONTENT

        startActivityForResult(Intent.createChooser(gallery, "Select picture"), PICK_IMAGE)

//下一个

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == PICK_IMAGE && resultCode == RESULT_OK) {
            imageUri = data?.data!!
            try {

                Picasso.get()
                    .load(imageUri)
                    .into(addImage)

            } catch (e: Throwable) {
                e.printStackTrace()
            }
        }
    }

这就是您所需要的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.