关于获取 手机相片的帖子一堆。但是里面很多的内容都是互相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
分享到:
相关推荐
Android 开发中,获取手机相册中的图片路径是一个常见的问题,以下将详细介绍如何在 Android 中打开手机相册获取图片路径。 一、权限申请 在 Android 中,访问外部存储需要申请权限,包括读取和写入外部存储的权限...
在iOS开发中,获取手机相册图片的时间和其他详细信息是一个常见的需求。这通常涉及到与系统照片库的交互,而苹果提供了Asset Library框架(ALAssetsLibrary)来实现这一功能。ALAssetsLibrary是iOS早期版本(iOS 4.0...
unity 读取手机相册,安卓和ios的两种都有,
在iOS开发中,获取用户手机中的图片和相册是一项常见的需求。`LWGPhotos`库是专门为这个目的设计的,它允许开发者自定义批量获取设备上的照片,并且对相册进行分类,同时优化了性能,使得在iOS 8之前和之后的系统...
本篇文章将详细介绍如何在Qt应用中通过JNI接口获取Android相册的图片列表。 首先,我们需要了解JNI。JNI是Java平台的一部分,它允许Java代码和其他语言写的代码进行交互。在Qt中调用JNI,主要是为了调用Android系统...
全选、反选和删除等在实际开发中可能需要实现的功能,本篇博客是小巫从一个别人开源的一个项目抽取出来的部分内容,把它给简化出来,可以让需要的朋友清楚知道如何对Android数据库操作,异步查询数据库获取我们需要...
在移动端应用开发中,有时我们需要实现调用手机摄像头拍照或从相册选择图片的功能。在本文中,我们将探讨如何使用 Vue.js 来实现这一功能。 首先,我们需要在 HTML 部分创建用户界面。这通常包括一个用于显示图片的...
获取相册中的图片,可以使用Intent启动系统图库: ```java Intent galleryIntent = new Intent(Intent.ACTION_PICK); galleryIntent.setType("image/*"); startActivityForResult(galleryIntent, GALLERY_REQUEST_...
本文将深入探讨如何在Android环境下,通过重写WebView来实现前端H5获取原生相册文件和拍照功能。 首先,我们了解`<input type>`在HTML5中的应用场景。在H5页面中,`<input type="file">`标签常用于让用户选择本地...
获取手机相册,点击每个相册之后进入该相册的图片列表界面,在图片列表界面可以实现图片多选,然后进入所选择的图片界面,在该界面内可以实现所选图片的上传等功能。 该项目最大特色: 1、获取相册列表,目前网络...
在Android应用开发中,"Android拍照和获取相册图片demo"是一个常见的功能需求,它涉及到用户界面设计、权限管理、意图(Intent)使用、图片处理等多个技术点。下面将详细讲解这些知识点。 首先,Android系统提供了...
在这个场景中,我们将重点讨论如何利用这些技术从手机的照相机和相册中获取图片。 首先,PhoneGap提供了一个叫做`Camera`的API,用于访问设备的摄像头和相册。在HTML5中,可以使用`<input type="file">`元素来让...
《手机图片提取器C#版源码解析及应用》 在现代智能手机的使用过程中,许多应用程序内部包含了丰富的图片资源,这些资源通常被打包在应用程序的安装文件或者数据文件中。为了便于开发者、设计师以及普通用户获取和...
获取到文件路径后,可以使用`StreamReader`或`File.ReadAllText`方法来读取txt文件的内容: ```csharp // 使用StreamReader using (StreamReader reader = new StreamReader(filePath)) { string fileContent = ...
将微博中获取图片功能单独摘出,可选择从手机相册或者相机拍照获取并以时间戳命名最后拍照所得相片,并以自定义缩略图形式显示主Activity中。 注意:一:相机路径检索可能因手机而异出现偏差 二:相机拍照现在...
这通常涉及到从手机相册选择图片或者直接通过相机拍摄。在这个过程中,HTML5和jQuery的结合提供了强大的功能,使得开发者可以创建用户友好的图像处理接口。本文将详细介绍如何使用这些技术实现移动端的头像裁剪与...
Unity是一款强大的跨平台游戏开发引擎,它支持创建2D、3D、VR和AR等多种类型的游戏。在开发针对Android和iOS平台的应用时,有时...在Android和iOS设备上,无论是获取用户的照片还是保存新的媒体内容,都能轻松实现。
在Android应用开发中,从系统相册选择照片或者通过相机拍照获取照片的路径,需要考虑对不同Android版本的兼容性,尤其是自Android 6.0(API级别23)引入的运行时权限管理。以下是对这个主题的详细讨论。 ### 1. ...
在Android开发中,获取手机上的所有图片并进行列表展示是一项常见的需求,这通常涉及到多媒体文件的访问、数据的加载和UI的设计。以下是一些相关的知识点: 1. **多媒体存储权限**: 在Android 6.0(API级别23)及...