【问题标题】:UIImagePickerController check if user edited the imageUIImagePickerController 检查用户是否编辑了图像
【发布时间】:2012-10-12 05:10:46
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

     UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
    
     UIImage *editedimage = [info objectForKey:UIImagePickerControllerEditedImage];
    
     if ([UIImagePNGRepresentation(image) isEqualToData:UIImagePNGRepresentation(editedimage)])
      //not edited
     else
      //edited
    

    【讨论】:

    • 此数据永远不会相同,因为编辑后的图像默认包含 600 x 600 的图像,无论原始图像大小是多少,无论用户是否与图像交互以进行编辑,editedImage 键将包含裁剪矩形内的图像。
    【解决方案2】:
    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
    
     UIImage *editedimage = [info objectForKey:UIImagePickerControllerEditedImage];
    if(editedimage.length>0){
    //then got the edited image
    }
    

    【讨论】:

      【解决方案3】:

      你不能只获取并比较图像的 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;
      

      【讨论】:

        【解决方案4】:

        看看这个:

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

        编辑信息键

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

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

        【讨论】:

          【解决方案5】:

          我知道这是一个非常古老的问题,一段时间内没有任何活动,但这是谷歌搜索中出现的问题,据我所知,这个问题仍未得到令人满意的回答。

          无论如何,判断图像是否被编辑的方法是这样的:

          在 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-07-05
            • 2017-08-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-05-08
            • 1970-01-01
            • 2014-01-03
            相关资源
            最近更新 更多