uiimagepickercontroller - получить имя изображения, выбранного из библиотеки фотографий - PullRequest
6 голосов
/ 03 мая 2011

Я пытаюсь загрузить изображение с моего iPhone / iPod touch в свой онлайн-репозиторий, я успешно выбрал изображение из фотоальбома, но у меня возникла одна проблема: я хочу знать имя изображения, например image1.jpgили что-то типа того.Как бы я знал название выбранного изображения.

Ответы [ 2 ]

6 голосов
/ 21 января 2013

Вместо использования обычного метода выбора изображений (UIImage*)[info valueForKey:UIImagePickerOriginalImage], который дает вам выбранное изображение в качестве экземпляра UIImage, вы можете использовать AssetsLibrary.framework и экспортировать фактический исходный файл (включая формат, имя и все метаданные).Это также имеет преимущество сохранения исходного формата файла (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;
    }
}
4 голосов
/ 04 мая 2011

Полагаю, знание точного имени изображения не будет проблемой, а получение уникального имени для выбранного изображения решит вашу задачу, чтобы вы могли загрузить изображение на сервер и отслеживать его по его имени. Может быть, это может помочь вам

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, вы можете сгенерировать уникальное имя и присвоить его выбранному изображению. Приветствия

...