2012-10-22 76 views
2

我使用的UIImagePickerController的属性allowsEditing设置为YESUIImagePickerController检查用户是否编辑了图像

当用户完成选择图像时,我想知道用户是否编辑了他选择或不选择的图像(例如,如果他缩放了图像)。此方法:

UIImage *editedImage = [info objectForKey:@"UIImagePickerControllerEditedImage"]; 

即使用户离开照片,它总是返回一个对象。有什么方法可以检查用户是否编辑了图像?例如,我可以检查UIImagePickerControllerEditedImageUIImagePickerControllerOriginalImage是不同的吗?

回答

7

didFinishPickingMediaWithInfo试试这个,因为我不知道:

UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; 

UIImage *editedimage = [info objectForKey:UIImagePickerControllerEditedImage]; 

if ([UIImagePNGRepresentation(image) isEqualToData:UIImagePNGRepresentation(editedimage)]) 
    //not edited 
else 
    //edited 
+1

此数据将永远不会相同,因为默认情况下,编辑图像默认包含600 x 600图像,无论原始图像大小是多少,用户是否与图像进行交互以进行编辑,编辑图像键将包含图像 - 在作物长度。 –

0
UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; 

UIImage *editedimage = [info objectForKey:UIImagePickerControllerEditedImage]; 
if(editedimage.length>0){ 
//then got the edited image 
} 
+1

image和editedImage都会有数据 –

0

会不只是得到和比较形象的CGSize?

BOOL sizeChanged = FALSE; 

// get current size of image 
CGSize originalSize = [image size]; 

//After the user hase made the action, get the new size 
CGSize currentSize = [image size]; 

// if the dimensions have been editied the condition is true 
if (originalSize.width != currentSize.width || 
    originalSize.height != currentSize.height 
    ) 
    sizeChanged = TRUE; 
else 
    sizeChanged = FALSE; 
0

检查了这一点:

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIImagePickerControllerDelegate_Protocol/UIImagePickerControllerDelegate/UIImagePickerControllerDelegate.html#//apple_ref/doc/uid/TP40007069

这是ImagePicker代表的文档。正如你所看到的,当用户镐和图像这就是所谓的:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 

信息 - 是包含发生了什么,什么已经拾取数据字典。如果允许设置为YES,则info包含原始图像和编辑的图像。检查链接我给你的

编辑信息键

有一堆的常量存在,可以给你你所寻求的数据!

从这里开始看到整个机械: http://developer.apple.com/library/ios/documentation/uikit/reference/UIImagePickerController_Class/UIImagePickerController/UIImagePickerController.html#//apple_ref/occ/instp/UIImagePickerController/allowsEditing

0

我知道,这是一个非常古老的问题,在一段时间没有活动,但是这是在谷歌搜索出现,并尽可能我可以说,这个问题还没有得到满意的答复。

无论如何,说句题外话,如果图像已被编辑或不能是这样的:

在didFinishPickingMediaWithInfo:您可以检查CropRect的宽度和原始图像的宽度。如果CropRect.width == originalImage.width + 1,那么它尚未被编辑。这是真的原因是因为编辑图像,用户必须捏和放大,这缩放图像和改变CropRect的大小。只是简单地移动图像将不会工作,因为它会反弹回来,除非它被缩放。

NSValue *pickerCropRect = info[UIImagePickerControllerCropRect]; 
CGRect theCropRect = pickerCropRect.CGRectValue; 

UIImage *originalImage = info[UIImagePickerControllerOriginalImage]; 
CGSize originalImageSize = originalImage.size; 

if (theCropRect.size.width == originalImageSize.width+1) { 
    NSLog(@"Image was NOT edited."); 
} else { 
    NSLog(@"Image was edited."); 
} 

据我可以告诉这适用于iOS 6在6S和6+。我没有看到它不应该在其他地方工作的真正原因。

相关问题