2

我正在使用UIImagePickerController属性allowsEditing设置为YES.

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

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

即使用户将图片原样保留,也始终返回一个对象。有什么方法可以检查用户是否编辑了图像?例如,我可以检查UIImagePickerControllerEditedImageandUIImagePickerControllerOriginalImage是否以某种方式不同?

4

5 回答 5

8

在didFinishPickingMediaWithInfo中试试这个,因为我不确定:

 UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];

 UIImage *editedimage = [info objectForKey:UIImagePickerControllerEditedImage];

 if ([UIImagePNGRepresentation(image) isEqualToData:UIImagePNGRepresentation(editedimage)])
  //not edited
 else
  //edited
于 2012-10-22T11:46:49.347 回答
0
UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];

 UIImage *editedimage = [info objectForKey:UIImagePickerControllerEditedImage];
if(editedimage.length>0){
//then got the edited image
}
于 2012-10-22T11:49:47.343 回答
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;
于 2012-10-22T12:16:51.217 回答
0

看一下这个:

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

这是 ImagePicker Delegate 的文档。如您所见,当用户选择并图像时,这被称为:

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

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

编辑信息键

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

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

于 2012-10-22T12:54:24.357 回答
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.");
}

据我所知,这适用于 6S 和 6+ 的 iOS 9。我看不出它不应该在其他地方工作的真正原因。

于 2016-09-01T17:57:10.310 回答