+ (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo { NSString* path = (__bridge_transfer NSString *)(contextInfo); [[NSFileManager defaultManager] removeItemAtPath:path error:nil]; NSLog(@"保存结束"); if( error == nil ) { } else { NSLog( @"Error saving image with UIImageWriteToSavedPhotosAlbum: %@", error ); } } int _SavePhoto(char *readAddr) { int result = 0; #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 140000 if( CHECK_IOS_VERSION( @"14.0" ) ) { result = [__NtNotificationWrapper requestPhotoPermissionNewest]; } else #endif result = [__NtNotificationWrapper requestPhotoPermissionNew]; if(result != 1) { return result; } NSString *strReadAddr = [NSString stringWithUTF8String:readAddr]; UIImage *img = [UIImage imageWithContentsOfFile:strReadAddr]; NSLog([NSString stringWithFormat:@"w:%f, h:%f", img.size.width, img.size.height]); UIImageWriteToSavedPhotosAlbum(img, nil, @selector(image:didFinishSavingWithError:contextInfo:), nil); return 1; } + (int)requestPhotoPermissionNew { PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus]; if( status == PHAuthorizationStatusAuthorized ) return 1; else if(status == PHAuthorizationStatusNotDetermined) { __block BOOL authorized = NO; dispatch_semaphore_t sema = dispatch_semaphore_create( 0 ); [PHPhotoLibrary requestAuthorization:^( PHAuthorizationStatus status ) { authorized = ( status == PHAuthorizationStatusAuthorized ); dispatch_semaphore_signal( sema ); }]; dispatch_semaphore_wait( sema, DISPATCH_TIME_FOREVER ); return authorized ? 1 : 0; } return 0; } #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 140000 + (int)requestPhotoPermissionNewest { PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatusForAccessLevel:PHAccessLevelReadWrite]; if( status == PHAuthorizationStatusAuthorized ) return 1; else if( status == PHAuthorizationStatusLimited ) { return 2; } else if( status == PHAuthorizationStatusNotDetermined ) { [PHPhotoLibrary requestAuthorizationForAccessLevel:PHAccessLevelReadWrite handler:^( PHAuthorizationStatus status ) { }]; return 3; } return 0; } #endif