Подтвердить что ты не робот

Наложение камеры с помощью User-Photo не сохраняется как отредактировано

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

Кроме того, из части редактирования "crop" есть белый, как показано в следующем:

enter image description here

4b9b3361

Ответ 1

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

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