首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用ALAssetsLibrary和ALAsset将图像提取为NSData

使用ALAssetsLibrary和ALAsset将图像提取为NSData
EN

Stack Overflow用户
提问于 2011-12-12 18:47:24
回答 3查看 13.8K关注 0票数 18

我希望使用ALAssetsLibrary和ALAsset直接以NSData对象的形式提取图像。

使用NSURL,我以以下方式取出图像。

代码语言:javascript
复制
NSURL *referenceURL =newURL;
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library assetForURL:referenceURL resultBlock:^(ALAsset *asset)
{
     UIImage  *copyOfOriginalImage = [UIImage imageWithCGImage:[[asset defaultRepresentation] fullResolutionImage]];
}

现在,我们将图像作为UIImage,但我需要直接将图像作为NSData。

我希望这样做是因为(我已经读过了)一旦你在UIImage中拍摄图像,那么我们就会丢失图像的所有EXIF细节。

这就是为什么我要将图像直接提取为NSData,而不是这样做的原因

代码语言:javascript
复制
NSData *webUploadData=UIImageJPEGRepresentation(copyOfOriginalImage, 0.5);

这一步会使我丢失所有的EXIF细节。

请帮帮忙。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-12 19:55:43

代码语言:javascript
复制
        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]);
        }];
票数 33
EN

Stack Overflow用户

发布于 2014-07-10 10:46:19

使用以下代码:

代码语言:javascript
复制
+ (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
EN

Stack Overflow用户

发布于 2012-11-02 15:12:00

代码语言:javascript
复制
UIImage * selImage = [UIImage imageWithCGImage:[asset thumbnail]];       
NSData *baseImage=UIImagePNGRepresentation(selImage);
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8473110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档