【问题标题】:Edit image after taking a picture拍照后编辑图像
【发布时间】:2011-06-13 10:04:20
【问题描述】:

我目前正在制作一个 iphone 应用程序,用户可以在其中拍照或从相册中选择它,然后在图像上放置一个叠加层。然后用户可以缩放、旋转和保存图像。目前,我可以拍照,或者选择一张作为相册。至于叠加层,我只是使用了 UIImageView 并将其放置在 Interface builder 的层次结构之上。对于相机,我正在使用以下代码:

-(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

希望有人能指出正确的方向。

非常感谢。 -Hakimo

【问题讨论】:

    标签: iphone ios uiimagepickercontroller


    【解决方案1】:

    有一种方法不需要过多地更改代码:

    - (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”即可!

    【讨论】:

    • OP 在哪里使用 UIImagePickerControllerOriginalImage 或 UIImagePickerControllerEditedImage?我不明白你。
    • @inherithandle OP 指的是 UIImagePickerControllerDelegate 的imagePickerController:didFinishPickingMediaWithInfo: 方法。 info 参数包含一个 NSDictionary,其中包含 UIImagePickerControllerOriginalImageUIImagePickerControllerEditedImage 等编辑信息键
    【解决方案2】:

    对于 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];
    
            }
    
    
    }
    

    【讨论】:

    • 感谢 Xcoder 的回复。我以前从未使用过操作表,所以我会尝试一下。使用操作表和我写的有区别吗?我可以从相册中获取图片并拍照,但我不确定如何自定义编辑页面。
    • 现在我知道什么是操作表了。它几乎就像一个 UIAlertView。我可能会使用它来将图像保存到相册提示符。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    • 2023-04-07
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    相关资源
    最近更新 更多