UIImagePickerController检查用户是否编辑了图像

时间:2012-10-22 11:35:43

标签: iphone objective-c ios cocoa-touch cocoa

我使用UIImagePickerController,其中allowsEditing属性设置为YES

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

UIImage *editedImage = [info objectForKey:@"UIImagePickerControllerEditedImage"];
即使用户按原样离开图片,

也始终返回一个对象。有没有办法检查用户是否编辑了图像?例如,我可以检查UIImagePickerControllerEditedImageUIImagePickerControllerOriginalImage是否有所不同?

5 个答案:

答案 0 :(得分:7)

didFinishPickingMediaWithInfo 中尝试此操作,因为我不确定:

 UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];

 UIImage *editedimage = [info objectForKey:UIImagePickerControllerEditedImage];

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

答案 1 :(得分:0)

UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];

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

答案 2 :(得分: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;

答案 3 :(得分: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

info - 是一个字典,其中包含有关已发生事件和已选择内容的数据。如果allowiting设置为YES,则info包含原始图像和编辑过的图像。检查我给你的链接

编辑信息键

那里有一堆常数可以为你提供所需的数据!

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

答案 4 :(得分: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 9中的6S和6+。我认为没有任何理由不应该在其他地方工作。