关于获取 手机相片的帖子一堆。但是里面很多的内容都是互相copy,有些方法写的不清楚,我在这里给大家完善下,代码如下:
dispatch_async(dispatch_get_main_queue(), ^{ @autoreleasepool { ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError *error) { NSLog(@"相册访问失败 = %@", [error localizedDescription]); if ([error.localizedDescription rangeOfString:@"Global denied access"].location!=NSNotFound) { NSLog(@"无法访问相册.请在'设置->定位服务'设置为打开状态."); } else { NSLog(@"相册访问失败."); } }; ALAssetsGroupEnumerationResultsBlock groupBlock = ^(ALAsset *result, NSUInteger index, BOOL *stop) { if (result!=NULL) { if ([[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypePhoto]) { NSLog(@"index = %d",index); // NSString *urlStr=[NSString stringWithFormat:@"%@",result.defaultRepresentation.url];//图片的url UIImage *img=[UIImage imageWithCGImage:result.thumbnail]; [photoArr addObject:img]; } } }; ALAssetsLibraryGroupsEnumerationResultsBlock libraryGroupBlock = ^(ALAssetsGroup* group, BOOL* stop) { NSLog(@"stop = %d",stop?1:0); if (group == nil) { NSLog(@"group == nil 结束"); } if (group!=nil) { NSString *g=[NSString stringWithFormat:@"%@",group]; NSLog(@"%@",g); [group enumerateAssetsUsingBlock:groupBlock]; } }; ALAssetsLibrary* library = [[ALAssetsLibrary alloc] init]; [library enumerateGroupsWithTypes: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=[UIImage imageWithCGImage:result.thumbnail]; [photoArr addObject:img];
第一次点击,400ms,第二次 200ms ,第三次 200ms
照片中还有一起其他的属性如下:
//唯一ID? NSString *uti = result.defaultRepresentation.UTI; NSLog(@"uti = %@",uti); //图片的长宽 CGSize dimensions = result.defaultRepresentation.dimensions; NSLog(@"width = %f . height = %f ",dimensions.width,dimensions.height); //图片的全屏图 CGImageRef refScreen = result.defaultRepresentation.fullScreenImage; //图片的高清图 CGImageRef refResolution = result.defaultRepresentation.fullResolutionImage; //图片名称 NSString *fileName = result.defaultRepresentation.filename; NSLog(@"fileName = %@",fileName); //图片大小 long long size = result.defaultRepresentation.size; NSLog(@"size = %lld",size); //图片原数据 NSDictionary *metadata = result.defaultRepresentation.metadata; NSLog(@"metadata = %@",metadata); //图片方向 ALAssetOrientation orientation = result.defaultRepresentation.orientation; NSLog(@"orientation = %d",orientation); //图片缩放大小 float scale = 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
相关推荐
在iOS开发中,获取手机相册图片的时间和其他详细信息是一个常见的需求。这通常涉及到与系统照片库的交互,而苹果提供了Asset Library框架(ALAssetsLibrary)来实现这一功能。ALAssetsLibrary是iOS早期版本(iOS 4.0...
Android 开发中,获取手机相册中的图片路径是一个常见的问题,以下将详细介绍如何在 Android 中打开手机相册获取图片路径。 一、权限申请 在 Android 中,访问外部存储需要申请权限,包括读取和写入外部存储的权限...
总结,通过Qt调用JNI接口获取Android相册图片列表,涉及的关键步骤包括设置Qt项目、创建JNI接口、生成和实现JNI函数、注册函数以及在Qt中调用。这使得开发者能够利用Qt的便利性,同时充分利用Android系统的原生功能...
在Android应用开发中,"Android拍照和获取相册图片demo"是一个常见的功能需求,它涉及到用户界面设计、权限管理、意图(Intent)使用、图片处理等多个技术点。下面将详细讲解这些知识点。 首先,Android系统提供了...
在iOS开发中,获取用户手机中的图片和相册是一项常见的需求。`LWGPhotos`库是专门为这个目的设计的,它允许开发者自定义批量获取设备上的照片,并且对相册进行分类,同时优化了性能,使得在iOS 8之前和之后的系统...
获取相册中的图片,可以使用Intent启动系统图库: ```java Intent galleryIntent = new Intent(Intent.ACTION_PICK); galleryIntent.setType("image/*"); startActivityForResult(galleryIntent, GALLERY_REQUEST_...
在Android开发中,获取手机上的所有图片并进行列表展示是一项常见的需求,这通常涉及到多媒体文件的访问、数据的加载和UI的设计。以下是一些相关的知识点: 1. **多媒体存储权限**: 在Android 6.0(API级别23)及...
在Android平台上,获取手机相册的操作涉及到访问设备上的媒体库,包括图片、视频和其他多媒体文件。这个过程通常需要用户授权,然后使用特定的API来读取相册中的数据。以下是一些关于如何在Android应用中实现这一...
unity 读取手机相册,安卓和ios的两种都有,
在这个场景中,我们将重点讨论如何利用这些技术从手机的照相机和相册中获取图片。 首先,PhoneGap提供了一个叫做`Camera`的API,用于访问设备的摄像头和相册。在HTML5中,可以使用`<input type="file">`元素来让...
本教程将详细介绍如何实现"从相册获取图片和视频上传"的功能。 首先,我们需要确保应用有权限访问用户的相册。在iOS系统中,这需要通过`Privacy - Photo Library Usage Description`键在Info.plist文件中添加权限...
在移动应用开发中,"从手机相机、相册获取照片"是一个常见的功能需求,它允许用户通过拍照或从他们的相册中选择图片,然后将这些图片上传到服务器。这一过程涉及多个步骤和技术,包括权限管理、相机API的使用、相册...
将微博中获取图片功能单独摘出,可选择从手机相册或者相机拍照获取并以时间戳命名最后拍照所得相片,并以自定义缩略图形式显示主Activity中。 注意:一:相机路径检索可能因手机而异出现偏差 二:相机拍照现在...
这通常涉及到从手机相册选择图片或者直接通过相机拍摄。在这个过程中,HTML5和jQuery的结合提供了强大的功能,使得开发者可以创建用户友好的图像处理接口。本文将详细介绍如何使用这些技术实现移动端的头像裁剪与...
《手机图片提取器C#版源码解析及应用》 在现代智能手机的使用过程中,许多应用程序内部包含了丰富的图片资源,这些资源通常被打包在应用程序的安装文件或者数据文件中。为了便于开发者、设计师以及普通用户获取和...
通过上述步骤,你的应用就能在Android 6.0及以上系统中正确地获取系统相册的图片路径,同时处理拍照获取的照片路径,确保兼容性和用户体验。在实际开发中,还需要注意错误处理和用户体验优化,例如在权限请求被拒绝...
Unity是一款强大的跨平台游戏开发引擎,它支持创建2D、3D、VR和AR等多种类型的游戏。在开发针对Android和iOS平台的应用时,有时...在Android和iOS设备上,无论是获取用户的照片还是保存新的媒体内容,都能轻松实现。
在移动端应用开发中,有时我们需要实现调用手机摄像头拍照或从相册选择图片的功能。在本文中,我们将探讨如何使用 Vue.js 来实现这一功能。 首先,我们需要在 HTML 部分创建用户界面。这通常包括一个用于显示图片的...
在Android平台上,用户经常需要与图像进行交互,无论是通过照相机拍摄新照片还是从设备的相册中选择已有的图片。这个过程涉及到Android系统提供的多种API和服务,它们构成了Android图像处理的基础框架。以下是对...
特别是在涉及到用户选择本地文件,如从相册选取图片或直接通过相机拍照时,由于不同平台的兼容性问题,开发者需要采取特定的策略。本文将深入探讨如何在Android环境下,通过重写WebView来实现前端H5获取原生相册文件...