2014-05-15 150 views
63

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

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

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

回答

120

当然可以。它实际上相当直截了当:

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

File f = new File(uri) 

Picasso.with(getActivity()).load(f).into(imageView); 

Picasso.with(getActivity()).load(uri).into(imageView); 

工作

+8

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

+6

我想这样做,但这是行不通的,我从另一个活动文件到我的应用程序缓存,但毕加索不加载它... – Loenix

21

是的,你可以。

尝试:

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

编辑

您也可以拨打.load(YOUR_URI),而不是为好。

+0

感谢您再次提醒我.. –

18

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

file:path/to/your/image 

此外,使用startActivityForResult时,你会得到这样的事情:

Uri imageContent = data.getData(); 

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

+2

谢谢,我没有工作,直到我看到你的答案,“文件:“需要前缀。 – henry000

+0

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

+1

@AlekseyTimoshchenko它应该以' file://'。你的Uri丢失了第二个'/'。 – Sufian

2

基本上,我们需要三样东西,Contextimage´s pathImageView集装箱

Picasso.with(context).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/

6

试试这个:

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

它的工作非常适合我。

+0

mh,我会使用RGB_8888,除非你有内存限制的问题,因为图像很大 – Zharf

+0

我的意思是ARGB_8888 ... – Zharf