关于获取 手机相片的帖子一堆。但是里面很多的内容都是互相copy,有些方法写的不清楚,我在这里给大家完善下,代码如下:
-
dispatch_async(dispatch_get_main_queue(),^{
-
@autoreleasepool
-
{
-
ALAssetsLibraryAccessFailureBlockfailureBlock=^(NSError*error)
-
{
-
NSLog(@"相册访问失败=%@",[errorlocalizedDescription]);
-
if([error.localizedDescriptionrangeOfString:@"Globaldeniedaccess"].location!=NSNotFound)
-
{
-
NSLog(@"无法访问相册.请在'设置->定位服务'设置为打开状态.");
-
}
-
else
-
{
-
NSLog(@"相册访问失败.");
-
}
-
};
-
-
-
ALAssetsGroupEnumerationResultsBlockgroupBlock=^(ALAsset*result,NSUIntegerindex,BOOL*stop)
-
{
-
if(result!=NULL)
-
{
-
if([[resultvalueForProperty:ALAssetPropertyType]isEqualToString:ALAssetTypePhoto])
-
{
-
NSLog(@"index=%d",index);
-
//NSString*urlStr=[NSStringstringWithFormat:@"%@",result.defaultRepresentation.url];//图片的url
-
UIImage*img=[UIImageimageWithCGImage:result.thumbnail];
-
[photoArraddObject:img];
-
}
-
}
-
};
-
ALAssetsLibraryGroupsEnumerationResultsBlocklibraryGroupBlock=^(ALAssetsGroup*group,BOOL*stop)
-
{
-
NSLog(@"stop=%d",stop?1:0);
-
if(group==nil)
-
{
-
NSLog(@"group==nil结束");
-
}
-
if(group!=nil){
-
NSString*g=[NSStringstringWithFormat:@"%@",group];
-
NSLog(@"%@",g);
-
[groupenumerateAssetsUsingBlock:groupBlock];
-
}
-
};
-
-
ALAssetsLibrary*library=[[ALAssetsLibraryalloc]init];
-
[libraryenumerateGroupsWithTypes:ALAssetsGroupAll
-
usingBlock:libraryGroupBlock
-
failureBlock:failureBlock];
-
}
-
});
打印结果:
>> stop = 1
>> ALAssetsGroup - Name:QQ, Type:Album, Assets count:0
>> stop = 1
>> ALAssetsGroup - Name:Camera Roll, Type:Saved Photos, Assets count:65
>> index = 0
.
.
.
>> index = 64
>> stop = 1
>> ALAssetsGroup - Name:My Photo Stream, Type:Photo Stream, Assets count:772
>> index = 0
.
.
.
>> index = 771
>> stop = 1
>> group == nil结束
以上为全部的日志。
其实代码很简单,就是几个block块的定义和实现,按照如下步骤执行。
1、先弹出是否允许访问相册。点击允许后
2、执行libraryGroupBlock(可以截取和分割字符串,获取相册相关信息)
3、执行groupBlock (该相册的照片信息,index是从0开始的。)
4、再执行libraryGroupBlock(有多少本相册,执行多少次)
5、再执行groupBlock
6、一直到>> group == nil 的时候,才算结束。
注:
700多张相片,存在集合里面(缩略图)
内存变化:(执行前)
内存变化:(执行后)
时间变化:(700多张相片)
第一次点击,450ms,第二次 250ms ,第三次 250ms
去掉:
-
UIImage*img=[UIImageimageWithCGImage:result.thumbnail];
-
[photoArraddObject:img];
第一次点击,400ms,第二次 200ms ,第三次 200ms
照片中还有一起其他的属性如下:
-
//唯一ID?
-
NSString*uti=result.defaultRepresentation.UTI;
-
NSLog(@"uti=%@",uti);
-
//图片的长宽
-
CGSizedimensions=result.defaultRepresentation.dimensions;
-
NSLog(@"width=%f.height=%f",dimensions.width,dimensions.height);
-
//图片的全屏图
-
CGImageRefrefScreen=result.defaultRepresentation.fullScreenImage;
-
//图片的高清图
-
CGImageRefrefResolution=result.defaultRepresentation.fullResolutionImage;
-
//图片名称
-
NSString*fileName=result.defaultRepresentation.filename;
-
NSLog(@"fileName=%@",fileName);
-
//图片大小
-
longlongsize=result.defaultRepresentation.size;
-
NSLog(@"size=%lld",size);
-
//图片原数据
-
NSDictionary*metadata=result.defaultRepresentation.metadata;
-
NSLog(@"metadata=%@",metadata);
-
//图片方向
-
ALAssetOrientationorientation=result.defaultRepresentation.orientation;
-
NSLog(@"orientation=%d",orientation);
-
//图片缩放大小
-
floatscale=result.defaultRepresentation.scale;
-
NSLog(@"scale=%f",scale);
-
//图片URL
-
NSURL*url=result.defaultRepresentation.url;
-
NSLog(@"url=%@",url);
输出:
>>uti = public.jpeg(不知道UTI什么意思,所有图片都是一样)
>>width = 1260.000000 . height = 1680.000000
>>fileName = IMG_0670.JPG
>>size = 543520
>>metadata = {
ColorModel = RGB;
DPIHeight = 72;
DPIWidth = 72;
Depth = 8;
Orientation = 1;
PixelHeight = 1680;
PixelWidth = 1260;
"{Exif}" = {
ColorSpace = 1;
ComponentsConfiguration = (
1,
2,
3,
0
);
ExifVersion = (
2,
2,
1
);
FlashPixVersion = (
1,
0
);
PixelXDimension = 1260;
PixelYDimension = 1680;
SceneCaptureType = 0;
};
"{TIFF}" = {
Orientation = 1;
ResolutionUnit = 2;
XResolution = 72;
YResolution = 72;
};
}
>>orientation = 0
>>scale = 1.000000
>> url = assets-library://asset/asset.JPG?id=9801003C-5700-4670-B255-FCD27297B74A&ext=JPG
参考:
http://www.tuicool.com/articles/UBZJFb
http://blog.csdn.net/sbvfhp/article/details/12384707
http://blog.csdn.net/enuola/article/details/8160801
分享到:
相关推荐
可以获取手机相册每张图片的详细信息,包括本地的,网络下载的,电脑传输的图片,都可以取得时间等信息。
vue实现调取手机摄像头和相册功能 本文实例为大家分享了vue实现调取手机摄像头和相册的具体代码,供大家参考,具体内容如下 自己总结的手机端拍照和相册原生的方法 HTML代码 <div> //要显示的图片 ...
全选、反选和删除等在实际开发中可能需要实现的功能,本篇博客是小巫从一个别人开源的一个项目抽取出来的部分内容,把它给简化出来,可以让需要的朋友清楚知道如何对Android数据库操作,异步查询数据库获取我们需要...
ios自定义批量获取手机图片,及相册分类,针对ios8前后实现两种不同的获取方式,获取图片快速、占用内存小。
获取手机相册,点击每个相册之后进入该相册的图片列表界面,在图片列表界面可以实现图片多选,然后进入所选择的图片界面,在该界面内可以实现所选图片的上传等功能。 该项目最大特色: 1、获取相册列表,目前网络...
前端H5获取Android原生相册文件和拍照功能,比如H5的<input type>类型,ios不用做任何处理,而Android需要对webview重新
Android拍照和获取相册图片
Qt调用Jni接口获取Android相册图片列表,对应博文 https://blog.csdn.net/weixin_43810973/article/details/84782373
NULL 博文链接:https://guoqiantong.iteye.com/blog/1741180
淘宝找人加的相册权限,东西其实和之前的一个装法,带了非常完整的搭建教程(视频 文本)方便大家研究。
主要为大家详细介绍了Android打开手机相册获取图片路径,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
获取系统相册拍照获取照片路径兼容Android6.0以上系统
将微博中获取图片功能单独摘出,可选择从手机相册或者相机拍照获取并以时间戳命名最后拍照所得相片,并以自定义缩略图形式显示主Activity中。 注意:一:相机路径检索可能因手机而异出现偏差 二:相机拍照现在...
可以用openfiledialog打开文件
有些手机应用图片资源都包在一个(或多个)文件,可以通过这个工具把里面的图片提取出来
安卓Android源码——获取手机通讯录的实战应用(含SIM卡中的联系人).rar
通过jquery实现在移动端进行头像裁剪 并上传 可以通过相册和拍照
启动手机相机或者相册获取图片上传服务器
获取手机上的所有图片以列表的方式显示点击具体某一条进行全图显示的简单的小demo