Редактировать изображение после съемки - PullRequest
6 голосов
/ 13 июня 2011

В настоящее время я делаю приложение для iphone, где пользователь делает фотографию или выбирает ее из альбома, затем поверх изображения накладывается оверлей. Затем пользователь может масштабировать, поворачивать и сохранять изображение. В настоящее время я могу сделать снимки или выбрать один для альбома. Что касается наложения, я просто использовал UIImageView и поместил его поверх иерархии в Интерфейсном конструкторе. Для камеры я использую этот код:

-(IBAction)getPhoto:(id)sender  {

// Create an image picker controller
UIImagePickerController * imagePicker = [[UIImagePickerController alloc] init];


if((UIButton *) sender == choosePhotoBtn)   {
    // Set source to photo albums
    imagePicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
}

else    {
    // Set source to camera
    imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
    imagePicker.showsCameraControls = YES;
}

// Delegate is self
imagePicker.delegate = self;

    // Allow editing of image
    imagePicker.allowsEditing = YES;

    // Show image picker
    [self presentModalViewController:imagePicker animated: YES];
}

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info   {
// Dismiss modalviewcontroller
[picker dismissModalViewControllerAnimated:YES];

// Displaying image to the imageView
imageView.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];

// Access the uncropped image from info dictionary
UIImage * image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];


// Save Image
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);

[picker release];
}

Проблема, с которой я столкнулся сейчас, - это редактирование фотографии после ее съемки. Как настроить камеру так, чтобы она велась так:

  1. Выберите либо использовать камеру, либо получить фотографию из альбома

  2. После того, как выбрано, изображение наложения изменится на то, где я поместил «круг» на лице, и фотография будет внизу, как маска. Этот вид также можно будет редактировать в полноэкранном режиме. Вы можете вращать, масштабировать и перемещать изображение, пока не нажмете «Готово».

Я прочитал эту часть в руководстве, но не могу понять, как ее использовать. http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIImagePickerController_Class/UIImagePickerController/UIImagePickerController.html

Надеюсь, кто-то может указать мне правильное направление.

Большое спасибо. -Хакимо

Ответы [ 2 ]

19 голосов
/ 13 мая 2012

есть способ не сильно менять свой код:

- (IBAction)takePicture:(id)sender {
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
    [imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
} else {
    [imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
}

[imagePicker setAllowsEditing:YES];
[imagePicker setDelegate:self];

//place image picker on the screen
[self presentViewController:imagePicker animated:YES completion:nil];
}

Если вы хотите использовать изображение, которое после редактирования, пожалуйста, измените "UIImagePickerControllerOriginalImage" на "UIImagePickerControllerEditedImage", вот и все!

0 голосов
/ 14 июня 2011

Для Q1, возможно ли реализовать лист действий, чтобы пользователь мог выбрать использование фотографии из альбома или сделать новый снимок?с функцией листа действий как что-то вроде следующего:

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (buttonIndex == 0) {
        picker = [[UIImagePickerController alloc]init];
        picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        picker.delegate = self;
        [self presentModalViewController:picker animated:YES];
        [picker release];
    }

    else if (buttonIndex == 1) {
        if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
            picker = [[UIImagePickerController alloc]init];
            picker.sourceType = UIImagePickerControllerSourceTypeCamera;
            picker.allowsEditing = YES;
            picker.delegate = self;
            [self presentModalViewController:picker animated:YES];
            [picker release];
        }
        else {
            UIAlertView *noCameraMsg = [[UIAlertView alloc] initWithTitle:@"no camera on this phone" message:@"" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [noCameraMsg show];
            [noCameraMsg release];

        }


}
...