Using ALAssetsLibrary and ALAsset take out Image as NSData

后端 未结 3 1555
青春惊慌失措
青春惊慌失措 2020-12-13 03:01

I wish to extract the image using ALAssetsLibrary and ALAsset directly in the form of a NSData object.

Using a NSURL I take out the image in the following manner.

相关标签:
3条回答
  • 2020-12-13 03:10
    UIImage * selImage = [UIImage imageWithCGImage:[asset thumbnail]];       
    NSData *baseImage=UIImagePNGRepresentation(selImage);
    
    0 讨论(0)
  • 2020-12-13 03:16

    Using this code:

    + (BOOL)exportDataToURL:(NSString *)filePath error:(NSError **)error andAsset:(ALAsset *)asset
    {
        [[NSFileManager defaultManager] createFileAtPath:filePath contents:nil attributes:nil];
        NSFileHandle *handle = [NSFileHandle fileHandleForWritingAtPath:filePath];
    
        if (!handle)
            return NO;
    
        static const NSUInteger BufferSize = 1024 * 1024;
    
        ALAssetRepresentation *rep = [asset defaultRepresentation];
        uint8_t *buffer = calloc(BufferSize, sizeof(*buffer));
        NSUInteger offset = 0, bytesRead = 0;
    
        do {
            @try {
                bytesRead = [rep getBytes:buffer fromOffset:offset length:BufferSize error:error];
                [handle writeData:[NSData dataWithBytesNoCopy:buffer length:bytesRead freeWhenDone:NO]];
                offset += bytesRead;
            } @catch(NSException *exception) {
                free(buffer);
    
                return NO;
            }
        } while (bytesRead > 0);
    
        free(buffer);
        return YES;
    }
    
    0 讨论(0)
  • 2020-12-13 03:24
            ALAssetsLibrary *assetLibrary=[[ALAssetsLibrary alloc] init];
            [assetLibrary assetForURL:[[self.imagedata objectAtIndex:i] resultBlock:^(ALAsset *asset) 
            {
                ALAssetRepresentation *rep = [asset defaultRepresentation];
                Byte *buffer = (Byte*)malloc(rep.size);
                NSUInteger buffered = [rep getBytes:buffer fromOffset:0.0 length:rep.size error:nil];
                NSData *data = [NSData dataWithBytesNoCopy:buffer length:buffered freeWhenDone:YES];//this is NSData may be what you want
                [data writeToFile:photoFile atomically:YES];//you can save image later
            } 
            failureBlock:^(NSError *err) {
                NSLog(@"Error: %@",[err localizedDescription]);
            }];
    
    0 讨论(0)
提交回复
热议问题