【问题标题】:How i can get NSData for image or video files, using Asset url我如何使用 Asset url 获取图像或视频文件的 NSData
【发布时间】:2014-03-05 09:17:23
【问题描述】:

我有一个类似

的网址

"assets-library://asset/asset.PNG?id=2B9DB56C-B9C6-4F4E-AD51-8A5E5F1DD2AA&ext=PNG"

在“图像”数组中。我如何通过这个 url 从媒体获取 NSData? 我需要在这段代码中使用 NSData:

#pragma mark VK methods

+(NSMutableArray*)attachmentIds:(NSArray*)images forMe:(NSDictionary*)me{
    NSMutableArray *attachmentsList = [NSMutableArray new];

    for (int i = 0; i<images.count; i++){

        NSData *imageData = [NSData dataWithContentsOfURL:[images objectAtIndex:i] ];

        NSString *serverUrl = [self getServerForVKUploadPhotoToWall:me];
        NSDictionary *uploadResult = [self sendVKPOSTRequest:serverUrl withImageData:imageData];
        NSString *hash = [uploadResult objectForKey:@"hash"];
        NSString *photo = [uploadResult objectForKey:@"photo"];
        NSString *server = [uploadResult objectForKey:@"server"];
        NSString *attach_id = [self getVKAttachIdforUser:me photo:photo server:server hash:hash];
        [attachmentsList addObject:attach_id];
    }
    return attachmentsList;
}

但是NSData *imageData = [NSData dataWithContentsOfURL:[images objectAtIndex:i]]; 不工作;

【问题讨论】:

    标签: ios


    【解决方案1】:

    我解决了我的问题。谢谢https://www.cocoacontrols.com/controls/doimagepickercontroller

    - (NSData *)getCroppedData:(NSURL *)urlMedia
    {
        __block NSData *iData = nil;
        __block BOOL bBusy = YES;
    
        ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset)
        {
            ALAssetRepresentation *representation = myasset.defaultRepresentation;
            long long size = representation.size;
            NSMutableData *rawData = [[NSMutableData alloc] initWithCapacity:size];
            void *buffer = [rawData mutableBytes];
            [representation getBytes:buffer fromOffset:0 length:size error:nil];
            iData = [[NSData alloc] initWithBytes:buffer length:size];
            bBusy = NO;
        };
    
        ALAssetsLibraryAccessFailureBlock failureblock  = ^(NSError *myerror)
        {
            NSLog(@"booya, cant get image - %@",[myerror localizedDescription]);
        };
    
        [_assetsLibrary assetForURL:urlMedia
                        resultBlock:resultblock
                       failureBlock:failureblock];
    
        while (bBusy)
            [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
    
        return iData;
    }
    

    【讨论】:

    • 谢谢。我尝试了很多示例来获取视频文件的字节并且一直为空。您的示例有所帮助。
    【解决方案2】:

    我想你可以看看这个question。这将允许您从给定的资产 URL 中检索 UIImage,然后可以将其转换为 NSData。

    资产 URL 不是文件 URL,因此 dataWithContentsOfURL 失败。

    【讨论】:

      猜你喜欢
      • 2018-01-09
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-21
      相关资源
      最近更新 更多