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方法处理您的一些有问题的图像
当我爬取 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();
}
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方法处理您的一些有问题的图像