Оверлей камеры с User-Photo не сохраняется как отредактированный - PullRequest
21 голосов
/ 16 августа 2011

Я использую прозрачное изображение с вырезанным , чтобы пользователь мог вставить / снять собственное изображение.По какой-то причине при использовании UIImagePickerControllerEditedImage и обрезке снимка, сделанного пользователем, изображение не сохраняется, поскольку оно было отредактировано;см. фото, например.

Моя проблема в том, что изображение не сохраняет точно, как фотография была отредактирована.(то есть: обрезано / изменено в размере).

Настройка UIImagePicker

-(void)choosePhotoDialog:(id)sender
{        
    OverlayView * overlay = [[OverlayView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH_IPHONE, SCREEN_HEIGTH_IPHONE) andPhoto:[dict objectForKey:@"imageUrl"]];
    [overlay setUserInteractionEnabled: NO];

    UIImagePickerController * picker = [[UIImagePickerController alloc] init];
    [picker setSourceType: UIImagePickerControllerSourceTypeCamera];
    [picker setDelegate: self];
    [picker setAllowsImageEditing: YES];
    [picker setShowsCameraControls: YES];
    [picker setNavigationBarHidden: YES];
    [picker setWantsFullScreenLayout: YES];
    [picker setCameraOverlayView: overlay];
    [self presentModalViewController:picker animated:YES];  
    [picker release];
}

После того, как изображение отредактировано:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    SDWebImageManager * manager = [SDWebImageManager sharedManager];
    UIImage * cachedImage  = [manager imageWithURL: [NSURL URLWithString: @"http://www.someurl.com/test.png"]];
    UIImage * userOriginal = [info valueForKey:UIImagePickerControllerEditedImage];

    /*  combining the overlay and the user-photo  */
    UIGraphicsBeginImageContext( CGSizeMake(640,960) );

        /*  for some reason I have to push the user-photo
            down 60 pixels for it to show correctly as it
            was edited.
         */
        [userOriginal drawAtPoint:CGPointMake(0,60)];
        [cachedImage drawAtPoint:CGPointMake(0,0)];

        UIImage * draft = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    UIImageWriteToSavedPhotosAlbum( draft, self, @selector(image:didFinishSavingWithError:contextInfo:), nil );       
}

Также есть белые пробелы от редактируемой части обрезки, как показано ниже:

enter image description here

1 Ответ

1 голос
/ 25 октября 2011

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

Вы можете извлечь и развернуть ключ UIImagePickerControllerCropRect из словаря info и снова выполнить редактирование самостоятельно на UIImagePickerControllerOriginalImage, чтобы получить желаемое результирующее изображение.

...