@ words don't say much, directly on the code
#import <AssetsLibrary/AssetsLibrary.h>//must import//photo original path # define Koriginalphotoimagepath [[ Nssearchpathfordirectoriesindomains (Nscachesdirectory, Nsuserdomainmask, YES) objectatindex:0] stringbyappendingpathcomponent:@ "originalphotoimages"]//video URL Path # define Kvideourlpath [[ Nssearchpathfordirectoriesindomains (Nscachesdirectory, Nsuserdomainmask, YES) objectatindex:0] stringbyappendingpathcomponent:@ "Videourl"]//caches path # define Kcachespath [Nssearchpathfordirectoriesindomains ( Nscachesdirectory, Nsuserdomainmask, YES) objectatindex:0]//mainviewcontroller@interface MTHMainViewController () @ Property (Nonatomic,strong) Mthnextviewcontroller *NEXTVC; @property (Nonatomic,strong) Nsmutablearray *grouparrays; @property (Nonatomic,strong) Uiimageview *litimgview; @end @implementation mthmainviewcontroller-(ID) InitWithNibN AME: (NSString *) Nibnameornil Bundle: (NSBundle *) nibbundleornil{self = [Super Initwithnibname:nibnameornil Bundle:nibb Undleornil]; if (self) { Custom initialization} return self;} -(void) viewdidload{[Super Viewdidload]; Do any additional setup after loading the view. Self.navigationItem.title = @ "Demo"; Self.view.backgroundColor = [Uicolor Clearcolor]; Initialize self.grouparrays = [Nsmutablearray array]; Test Baritem Self.navigationItem.rightBarButtonItem = [[Uibarbuttonitem alloc] initwithtitle:@ "test" style: Uibarbuttonitemstyleplain target:self Action: @selector (TestRun)]; Test gesture Uipangesturerecognizer *panrecognizer = [[Uipangesturerecognizer alloc] initwithtarget:self action: @selector (d Idclickpangesturerecognizer:)]; [Self.navigationController.view Addgesturerecognizer:panrecognizer]; Thumbnails of images or videos show self.litimgview = [[Uiimageview alloc] Initwithframe:cgrectmake (100, 200, 120, 120)]; [Self.view Addsubview:_litimgview];} -(void) testrun{__weak mthmainviewcontroller *weakself = self; Dispatch_async (Dispatch_get_global_queue (dispatch_queue_priorIty_default, 0), ^{alassetslibrarygroupsenumerationresultsblock listgroupblock = ^ (Alassetsgroup *group, BOOL *sto P) {if (group! = nil) {[Weakself.grouparrays addobject:group]; } else {[weakself.grouparrays enumerateobjectsusingblock:^ (id obj, Nsuinteger idx, BOOL *stop) { [obj enumerateassetsusingblock:^ (alasset *result, Nsuinteger index, BOOL *stop) {if ([result thumbnail]! = nil) {//Photo if ( [[Result Valueforproperty:alassetpropertytype] Isequaltostring:alassettypephoto]) {nsdate *date= [result Valueforproperty:alassetpropertydat E]; UIImage *image = [UIImage imagewithcgimage:[result thumbnail]; NSString *filename = [[result defaultrepresentation] fileName]; Nsurl *url = [[result defaultrepresentation] url]; int64_t fileSize = [[result defaultrepresentation] size]; NSLog (@ "date =%@", date); NSLog (@ "filename =%@", filename); NSLog (@ "url =%@", url); NSLog (@ "fileSize =%lld", fileSize); UI updates remember to put in the main thread, or else wait for the child thread to queue up don't know what age, will be very slow dispatch_async (Dispatch_get_main_queue (), ^{ Self.litimgView.image = image; }); }//Video else if ([[Result Valueforproperty:alassetpropertytype] IsEq Ualtostring:alassettypevideo]) {//is similar to the picture method } } }]; }]; } }; Alassetslibraryaccessfailureblock Failureblock = ^ (Nserror *error) {nsstring *errormessage = nil; switch ([error code]) {Case Alassetslibraryaccessuserdeniederror:case alassetslibraryacces Sgloballydeniederror:errormessage = @ "User denied access to the album, please open in < privacy >"; Break Default:errormessage = @ "Reason unknown."; Break } dispatch_async (Dispatch_get_main_queue (), ^{uialertview *alertview = [[Uialertvie W alloc]initwithtitle:@ "error, inaccessible!" Message:errormessage delegate:self cancelbuttontitle:@ "OK" Otherbuttontitles:nil, nil]; [Alertview show]; }); }; Alassetslibrary *assetslibrary = [[Alassetslibrary alloc] init]; [Assetslibrary Enumerategroupswithtypes:alassetsgroupall Usingblock:listgroupblock FAI Lureblock:failureblock]; });}
But
the path taken directly from the above method cannot be transferred and must be converted to a nsdata object to be re-written to the sandbox path
Convert the URL of the original image to NSData data, write to sandbox-(void) Imagewithurl: (nsurl *) URL withfilename: (NSString *) filename{//Enter this method should also be judged, If you have already converted, do not call this method//How to determine has been converted, through the existence of the file path alassetslibrary *assetlibrary = [[Alassetslibrary alloc] init]; Create a folder that holds the original diagram--->originalphotoimages nsfilemanager * filemanager = [Nsfilemanager Defaultmanager]; if (![ FileManager Fileexistsatpath:koriginalphotoimagepath]) {[FileManager Createdirectoryatpath:koriginalphotoimagepat H Withintermediatedirectories:yes Attributes:nil Error:nil]; } dispatch_async (Dispatch_get_global_queue (dispatch_queue_priority_default, 0), ^{if (URL) {//Main method [Assetlibrary assetforurl:url resultblock:^ (Alasset *asset) {Alassetrepresentation *rep = [Asset defaultrepresentation]; Byte *buffer = (byte*) malloc ((unsigned long) rep.size); Nsuinteger buffered = [Rep getbytes:buffer fromoffset:0.0 Length: ((unsigned long) rep.size) Error:nil]; NSData *data = [NSData datawithbytesnocopy:buffer length:buffered Freewhendone:yes]; NSString * ImagePath = [Koriginalphotoimagepath stringbyappendingpathcomponent:filename]; [Data Writetofile:imagepath Atomically:yes]; } Failureblock:nil]; } });} Convert the URL of the original video to NSData data, write to sandbox-(void) Videowithurl: (nsurl *) URL withfilename: (NSString *) filename{//Parse, Why does the video not open itself up to the size of a memory write like a picture? Think, if 1 video has more than 1G, is it directly open 1G more space to write? Alassetslibrary *assetlibrary = [[Alassetslibrary alloc] init]; Dispatch_async (Dispatch_get_global_queue (dispatch_queue_priority_default, 0), ^{if (URL) {[Assetlibrar Y assetforurl:url resultblock:^ (alasset *asset) {alassetrepresentation *rep = [Asset defaultrepresentation ]; NSString * Videopath = [Kcachespath stringbyappendingpathcomponent:filename]; char const *CVIDEOPATH = [Videopath utf8string]; FILE *file = fopen (Cvideopath, "A + "); if (file) {const int buffersize = 1024 * 1024; Initializes a 1M buffer Byte *buffer = (byte*) malloc (buffersize); Nsuinteger Read = 0, offset = 0, written = 0; nserror* err = nil; if (rep.size! = 0) {do {read = [rep Getbytes:buffer Fromoffset:offset length:buffersize error:&err]; Written = fwrite (buffer, sizeof (char), read, file); Offset + = read; } while (read! = 0 &&!err);//no end, no error, OK continue}//release buffer, close file Free (buffer); buffer = NULL; fclose (file); File = NULL; }} Failureblock:nil]; } });}
@ Reprint please mark: Transfer from iOS world @ confused little book Thank you!
iOS development get pictures and videos in the System album (with URL translation)