gpt4 book ai didi

android - 如何获取从图库中选择的 Picasa 图片的缩略图?

转载 作者:行者123 更新时间:2023-11-29 00:43:47 27 4
gpt4 key购买 nike

我正在开发一个应用程序,用户可以在其中选择文件,可以是来自相机的新图像、来自图库的图像,也可以是普通的旧文件。然后它会显示所选项目的图标和名称。我有这个工作,但有一个异常(exception)。图库应用程序集成了 picasaweb 图片。如果用户从 Picasa 相册中选择一张图片,我将无法获取它的缩略图。

我使用的是 MediaStore.Images.Thumbnails.getThumbnail() 方法,它适用于图库中的其他图像,但对于 picasaweb 文件,无论我尝试使用哪种缩略图,我都会得到得到(尽管 MICRO 是我所追求的):

ERROR/MiniThumbFile(2051): Got exception when reading magic, id = 5634890756050069570, disk full or mount read-only? class java.lang.IllegalArgumentException

我注意到为所选文件提供的 URI 不同。本地镜像文件如下所示:

content://media/external/images/media/6912

并且 picasaweb url 看起来像:

content://com.android.gallery3d.provider/picasa/item/5634890756050069570

我尝试使用 Thumbnails.queryMiniThumbnails() 和投影数组中的 Thumbnails.THUMB_DATA 来使用查询获取原始 THUMB_DATA,但出现“没有这样的列”错误。

有没有其他方法可以更好地获取缩略图?当我尝试访问完整图像数据时是否会遇到同样的问题?

最佳答案

我发现在我的 Galaxy Nexus 上,Picassa 的图像存储在/sdcard/Android/data/com.google.android.apps.plus/cache 目录下的一个子目录中。当内容提供者为 com.google.android.gallery3d.provider 时,URL 中“item”之后的数字包含图像的名称(在上面的示例中为“5634890756050069570”)。此数据对应于/sdcard/Android/data/com.google.android.apps.plus/cache 下的子目录之一中的扩展名为“.screen”的文件。如果您要使用 DDMS 从您的手机(在您的情况下为 5634890756050069570.screen)复制此图像并使用扩展名“.jpeg”重命名它,您可以打开它并在您的计算机上查看它。

以下 onActivityResult 方法将检查返回的内容提供程序,然后递归搜索/sdcard/Android/data/com.google.android.apps.plus/cache 目录中的文件。私有(private)成员变量fileSearchPathResults由递归搜索方法walkDirectoryRecursivelySearchingForFile()填充。

private String fileSearchPathResult = null;

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
String filePath = null;

// This code is required to get the image path on content providers
// on API > 10 where the image is from a picassa web album, since Google changed
// the content provider in versions with API > 10
if (selectedImage.toString().contains("com.google.android.gallery3d.provider")) {
StringBuilder contentProviderPath = new StringBuilder(selectedImage.toString());
int beginningIndex = contentProviderPath.lastIndexOf("/");
String fileNameWithoutExt = contentProviderPath.subSequence(beginningIndex + 1,
contentProviderPath.length()).toString();
Log.i(TAG, fileNameWithoutExt);
try {
File path = new File("/sdcard/Android/data/com.google.android.apps.plus/cache");
if (path.exists() && path.isDirectory()) {
fileSearchPathResult = null;
walkDirectoryRecursivelySearchingForFile(fileNameWithoutExt, path);
if (fileSearchPathResult != null) {
filePath = fileSearchPathResult;
}
}
} catch (Exception e) {
Log.i(TAG, "Picassa gallery content provider directory not found.");
}
}
}


public void walkDirectoryRecursivelySearchingForFile(String fileName, File dir) {
String pattern = fileName;

File listFile[] = dir.listFiles();
if (listFile != null) {
for (int i = 0; i < listFile.length; i++) {
if (listFile[i].isDirectory()) {
walkDirectoryRecursivelySearchingForFile(fileName, listFile[i]);
} else {
if (listFile[i].getName().contains(pattern)) {
fileSearchPathResult = listFile[i].getPath();
}
}
}
}
}

通过文件路径,您可以使用以下代码创建图像的位图:

        Bitmap sourceImageBitmap = BitmapFactory.decodeFile(filePath);

关于android - 如何获取从图库中选择的 Picasa 图片的缩略图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7778693/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com