从文件系统加载图像

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

我使用 startActivityForResult让用户从他的图库中选择一张照片,然后希望显示选定的图像。

我已经有了获得图像文件系统 Uri的工作代码,但是无法让 Picasso.load()方法工作。

91620 次浏览

你可以的。

试试:

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

剪辑

也可以调用 .load(YOUR_URI)

当然可以,其实很简单:

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);

工程

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

file:path/to/your/image

此外,当使用 startActivityForResult 时,您将得到如下内容:

Uri imageContent = data.getData();

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

基本上我们需要三样东西,Contextimage´s pathImageView容器

旧版毕加索 :

 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/

试试这个:

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

对我来说很完美。

> 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);

如果有人想对 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()
}
}
}

这就够了。