MediaStore 图片宽高 null

MediaStore Image width and height null

当我爬取 MediaStore 时,有些图片的身高和体重条目为空。

文件存在,我可以用图像浏览器显示它们。

Cursor mCursor = _context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,null,null,null,MediaStore.Images.Media.DEFAULT_SORT_ORDER);
if(mCursor != null){
    mCursor.moveToFirst();
    while(!mCursor.isAfterLast()) {
            Log.d("DEBUG","PIC PATH: " + mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.DATA)));
            Log.d("DEBUG","WIDTH: " + mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.WIDTH)));
            Log.d("DEBUG","HEGHT: " + mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.HEIGHT)));
        mCursor.moveToNext();
    }
    mCursor.close();
}

09-12 18:17:30.861 13002-13002/com.google.observer D/DEBUG: PIC PATH: /storage/emulated/0/Pictures/Instagram/IMG_20160813_221335.jpg

09-12 18:17:30.861 13002-13002/com.google.observer D/DEBUG: WIDTH: null

09-12 18:17:30.861 13002-13002/com.google.observer D/DEBUG: HEGHT: null

文件尺寸:3366*2988,我可以在文件浏览器中打开它。

编辑

我用列试过了(见 Pavneet Singh 的回答),但同样的错误。大部分图片有效,只有少数图片有此问题:

final String[] columns = {MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA, MediaStore.Images.Media.WIDTH, MediaStore.Images.Media.HEIGHT, MediaStore.Images.Media.DISPLAY_NAME, MediaStore.Images.Media.SIZE};
Cursor mCursor = _context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,columns,null,null,MediaStore.Images.Media.DEFAULT_SORT_ORDER);
if(mCursor != null){
    mCursor.moveToFirst();
    while(!mCursor.isAfterLast()) {
            Log.d("DEBUG","PIC PATH: " + mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.DATA)));
            Log.d("DEBUG","WIDTH: " + mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.WIDTH)));
            Log.d("DEBUG","HEGHT: " + mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.HEIGHT)));
        mCursor.moveToNext();
    }
    mCursor.close();
}
由于 docs 中提到的性能原因,

MediaStore 不会自动 return 所有列值,因此您需要显式地将投影传递给 MediaStore 查询.

final String[] columns = {
    MediaStore.Images.Media.DATA,
    MediaStore.Images.Media.WIDTH,
    MediaStore.Images.Media.HEIGHT
    };


Cursor mCursor = _context.getContentResolver().
                     query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                          columns,null,null,
                          MediaStore.Images.Media.DEFAULT_SORT_ORDER);

有些人觉得这很混乱,但它提高了性能,因为可能有太多与图像相关的细节,如日期、时间、标题、地点、纬度、经度等,如果查询是针对所有图像,这会降低性能存储(通常是加上可以是数千张图像)因此数据更少,时间更少因此性能更好。

详情 : 有些图片可能没有所需的信息,可能它们来自其他应用程序或从某些网站等下载,因此请使用更新信息。

更新:您可以按照this方法处理您的一些有问题的图像