Как я могу избежать сохранения в фотопленке изображения, выбранного из фотопленки? [iOS]

Я легко могу сохранять в фотопленку изображения, снятые камерой. Но я не хочу сохранять изображение, если оно выбрано из фотопленки, потому что это создаст дубликат.

Как сделать следующее и выборочно сохранить в фотопленку?

РЕДАКТИРОВАТЬ 1: Как сказал rmaddy, я могу: сохранять только в рулоне камеры, если picker.sourceType равен UIImagePickerControllerSourceTypeCamera.

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

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];

if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {
    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];

    [self.myImageView setImage: image];
    [self.myImageView setContentMode:UIViewContentModeScaleAspectFit];
    ALAssetsLibrary *al=[[ALAssetsLibrary alloc] init];

    // ------> Saving to Camera Roll <------------

    [al writeImageToSavedPhotosAlbum:[image CGImage] metadata:nil completionBlock:^(NSURL *assetURL,NSError *error) { 

            ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myAsset) {
                ALAssetRepresentation *rep = [myAsset defaultRepresentation];
                NSString *fileName = [rep filename];
                ImageInfo *imgInfo = [[ImageInfo alloc] initWithEventId:0 name:fileName image:UIImageJPEGRepresentation(image, 1.0)];
                imgInfo.isDirty = YES;
                [self.imagesArray addObject:imgInfo];
                [self dismissViewControllerAnimated:YES completion:nil];
                NSLog(@"Image from Camera %@ added to imageArray",fileName);
            };

            ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc]init];
            [assetsLibrary assetForURL:assetURL
                           resultBlock:resultblock
                          failureBlock:nil];

     }];
}
else if ([mediaType isEqualToString:(NSString *)kUTTypeMovie])
{
    // Code here to support video if enabled
}

РЕДАКТИРОВАТЬ 2:

РЕШЕНИЕ С ЭТОМ МОДОМ: (Я знаю, что есть небольшое дублирование кода, я постараюсь улучшить его позже)

if (newMedia){
        ALAssetsLibrary *al=[[ALAssetsLibrary alloc] init];
        [al writeImageToSavedPhotosAlbum:[image CGImage] metadata:nil completionBlock:^(NSURL *assetURL,NSError *error)
        {                
            ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myAsset)
            {
                ALAssetRepresentation *rep = [myAsset defaultRepresentation];
                //NSString *fileName = [rep filename];
                NSString *imgUrl = [[rep url] absoluteString];
                ImageInfo *imgInfo = [[ImageInfo alloc] initWithEventId:0 imgUrl:imgUrl image:UIImageJPEGRepresentation(image, 1.0)];
                imgInfo.isDirty = YES;
                [self.imagesArray addObject:imgInfo];
                [self dismissViewControllerAnimated:YES completion:nil];
                NSLog(@"Image from Camera %@ added to imageArray",imgUrl);
            };

            ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc]init];
            [assetsLibrary assetForURL:assetURL
                           resultBlock:resultblock
                          failureBlock:nil];
        }];
} else {
        NSString* imgUrl = UIImagePickerControllerReferenceURL;
        ImageInfo *imgInfo = [[ImageInfo alloc] initWithEventId:0 imgUrl:imgUrl image:UIImageJPEGRepresentation(image, 1.0)];
        imgInfo.isDirty = YES;
        [self.imagesArray addObject:imgInfo];
        NSLog(@"Image from Camera Roll %@ added to imageArray",imgUrl);
        [self dismissViewControllerAnimated:YES completion:nil];
}

person Alvin    schedule 18.01.2013    source источник


Ответы (1)


Сохраняйте в фотопленку, только если picker.sourceType равно UIImagePickerControllerSourceTypeCamera.

person rmaddy    schedule 18.01.2013
comment
правильно, но если я это сделаю, я не смогу получить информацию о выбранном изображении, в основном имя файла. - person Alvin; 18.01.2013
comment
@AlvinPastore Используйте ключ UIImagePickerControllerReferenceURL для info словаря, чтобы получить исходный URL-адрес для выбранного изображения. Используйте это вместо assetURL при получении изображения из библиотеки фотографий. - person rmaddy; 19.01.2013
comment
Спасибо. Я решил использовать URL-адрес вместо имени файла и изменил код для обработки информации напрямую (как вы предложили) вместо использования кода ALAssetLibrary ... - person Alvin; 19.01.2013