【问题标题】:uiimagepickercontroller - get the name of the image selected from photo libraryuiimagepickercontroller - 获取从照片库中选择的图像的名称
【发布时间】:2011-08-17 09:55:59
【问题描述】:

我正在尝试将图像从我的 iPhone/iPod touch 上传到我的在线存储库,我已成功从相册中选择了图像,但我遇到了一个问题,我想知道图像的名称,例如 image1.jpg或类似的东西。我怎么知道所选图像的名称。

【问题讨论】:

  • 你是如何挑选图片的?您实际上可能已经在仪式中给出了文件路径?

标签: iphone ipad uiimagepickercontroller photolibrary


【解决方案1】:

您可以使用AssetsLibrary.framework 并导出实际的源文件(包括格式、名称和所有元数据),而不是使用通常的图像选择器方法(UIImage*)[info valueForKey:UIImagePickerOriginalImage] 将所选图像作为 UIImage 的实例。这还具有保留原始文件格式(png 或 jpg)的优点。

#import <AssetsLibrary/AssetsLibrary.h>

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    [self dismissPicker];
    // try to get media resource (in case of a video)
    NSURL *resourceURL = [info objectForKey:UIImagePickerControllerMediaURL];
    if(resourceURL) {
        // it's a video: handle import
        [self doSomethingWith:resourceURL];
    } else {
        // it's a photo
        resourceURL = [info objectForKey:UIImagePickerControllerReferenceURL];

        ALAssetsLibrary *assetLibrary = [ALAssetsLibrary new];
        [assetLibrary assetForURL:resourceURL
                      resultBlock:^(ALAsset *asset) {
                          // get data
                          ALAssetRepresentation *assetRep = [asset defaultRepresentation];
                          CGImageRef cgImg = [assetRep fullResolutionImage];
                          NSString *filename = [assetRep filename];
                          UIImage *img = [UIImage imageWithCGImage:cgImg];
                          NSData *data = UIImagePNGRepresentation(img);
                          NSString *cacheDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
                          NSURL *tempFileURL = [NSURL fileURLWithPath:[cacheDir stringByAppendingPathComponent:filename]];
                          BOOL result = [data writeToFile:tempFileURL.path atomically:YES];
                          if(result) {
                              // handle import
                              [self doSomethingWith:resourceURL];
                              // remove temp file
                              result = [[NSFileManager defaultManager] removeItemAtURL:tempFileURL error:nil];
                              if(!result) { NSLog(@"Error removing temp file %@", tempFileURL); }
                          }
                      }
                     failureBlock:^(NSError *error) {
                         NSLog(@"%@", error);
                     }];
        return;
    }
}

【讨论】:

  • 当您已经拥有所需的所有数据时,创建临时文件的目的是什么?
  • 这个sn-p确实不需要。它在这里结束,因为我通常更喜欢传递一个相当小的 URL 而不是巨大的对象,以避免可能导致旧设备崩溃的内存压力。
【解决方案2】:

我想知道确切的图像名称不是问题,而是为挑选的图像获取一个唯一的名称将解决您的目的,以便您可以将图像上传到服务器并通过其名称进行跟踪。也许这可以帮助你

NSMutableString *imageName = [[[NSMutableString alloc] initWithCapacity:0] autorelease];

CFUUIDRef theUUID = CFUUIDCreate(kCFAllocatorDefault);
if (theUUID) {
    [imageName appendString:NSMakeCollectable(CFUUIDCreateString(kCFAllocatorDefault, theUUID))];
            CFRelease(theUUID);
}
[imageName appendString:@".png"];

从 Picker 中选择图像后,您可以生成一个唯一名称并将其分配给 Picked 图像。 干杯

【讨论】:

  • 我认为不可能从照片库中获取图片的确切名称。
猜你喜欢
  • 1970-01-01
  • 2012-04-04
  • 1970-01-01
  • 1970-01-01
  • 2016-11-01
  • 2011-05-17
  • 2014-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多