从 android 图库中选择缩略图

Posted

技术标签:

【中文标题】从 android 图库中选择缩略图【英文标题】:select thumbnail from android gallery 【发布时间】:2013-05-31 11:09:09 【问题描述】:

我知道如何从 android 的图库中获取照片

Intent gallery = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(gallery, PHOTO_REQUEST_CODE);

但是我该如何具体选择缩略图呢?

赏金理由:

我已经在 Get thumbnail Uri/path of the image stored in sd card + android 尝试了这两种解决方案。他们不适合我。我不知道如何从data 中获取selectedImageUri 类型为long 的方法

 onActivityResult(int requestCode, int resultCode, Intent data)

【问题讨论】:

Get thumbnail Uri/path of the image stored in sd card + android的可能重复 @MiroMarkarian 感谢您的链接。但是当我使用Bitmap bitmap = MediaStore.Images.Thumbnails.getThumbnail( getContentResolver(), data.getData(), MediaStore.Images.Thumbnails.MINI_KIND, (BitmapFactory.Options) null); 时出现错误。我如何将data.getData() 更改为回复中建议的 id? 尝试使用Cursors。这是那边那个人建议的第二个解决方案,据报道它比Bitmap选项效果更好 @MiroMarkarian 第二个解决方案期望longselectedImageUri。但我只有data.getData()。如何获取/解析 id? 嘿,你有想过吗?我在看同样的问题... 【参考方案1】:
String fn = ...; // file name
ContentResolver cr = ctx.getContentResolver();
Cursor c = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
           new String[]
              BaseColumns._ID
           , MediaColumns.DATA + "=?", new String[] fn , null);
     if(c!=null) 
        try
           if(c.moveToNext()) 
              long id = c.getLong(0);
              Bitmap thumbnail = MediaStore.Images.Thumbnails.getThumbnail(cr, id, MediaStore.Images.Thumbnails.MINI_KIND, null);
           
        finally
           c.close();
        
     

【讨论】:

【参考方案2】:

如果你手上有它的光标,你可以得到它的ID,

int id = cursor.getInt(cursor
                    .getColumnIndex(MediaStore.MediaColumns._ID));

参考以下代码

Cursor cursor = context.getContentResolver().query(
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                new String[]  MediaStore.Images.Media._ID ,
                MediaStore.Images.Media.DATA + "=? ",
                new String[]  filePath , null);

        if (cursor != null && cursor.moveToFirst()) 
            int id = cursor.getInt(cursor
                    .getColumnIndex(MediaStore.MediaColumns._ID));
            Uri baseUri = Uri.parse("content://media/external/images/media");
            return Uri.withAppendedPath(baseUri, "" + id);

所以,对于缩略图,

Bitmap thumbnail = MediaStore.Images.Thumbnails.getThumbnail(cursor, id, MediaStore.Images.Thumbnails.MINI_KIND, null);

【讨论】:

【参考方案3】:

嘿,所以如果其他一切都不适合你,那么如果你有位图,这里是一种制作自己的缩略图的简单方法。如果您不知道如何从 Uri 加载位图:

Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);

以下是制作精美缩略图的代码:

        final int THUMBNAIL_HEIGHT = 75;//48
        final int THUMBNAIL_WIDTH = 75;//66
        Float width  = new Float(bitmap.getWidth());
        Float height = new Float(bitmap.getHeight());
        Float ratio = width/height;
        bitmap = Bitmap.createScaledBitmap(bitmap, (int)(THUMBNAIL_HEIGHT*ratio), THUMBNAIL_HEIGHT, false);

        int padding = (THUMBNAIL_WIDTH - bitmap.getWidth())/2;
        image.setPadding(padding, padding, padding, padding);
        image.setBackgroundColor(0);
        image.setImageBitmap(bitmap);

在这段代码中,“image”是 ImageView 的变量。我希望这会有所帮助:D

【讨论】:

以上是关于从 android 图库中选择缩略图的主要内容,如果未能解决你的问题,请参考以下文章

图像编辑后如何更新android画廊的缩略图预览

有没有办法从手机图库中读取缩略图?

CoreLDRAW X4怎么设置才能显示缩略图?

Android:如何获取匹配缩略图 URI 的文件路径?

如何创建从Android视频文件路径视频缩略图

如何在图库中的缩略图之间留出空间并且在所有浏览器中都相同?