【问题标题】:Crop UIImage from a transformed UIImageView从转换后的 UIImageView 裁剪 UIImage
【发布时间】:2012-07-03 19:12:36
【问题描述】:

我让用户从相机中捕捉图像或从库中挑选一张。 我在UIImageView 中显示此图像。 用户现在可以在边界框内缩放和定位图像,就像在 allowsEditing 设置为 YES 时使用 UIImagePickerController 所做的一样。

当用户对结果感到满意并点击完成时,我想生成一个裁剪后的UIImage。 使用CGImageCreateWithImageInRect 时会出现问题,因为这没有考虑缩放。像这样将转换应用于 imageView:

CGAffineTransform transform = CGAffineTransformScale(self.imageView.transform, newScale, newScale);
[self.imageView setTransform:transform];

使用手势识别器。

我假设正在发生的事情是; UIImageView 被缩放和移动,然后将 UIViewContentModeScaleAspectFit 应用到 UIImage 是持有的,当我要求它裁剪图像时,它就是这样做的 - 不考虑缩放定位。我这么认为的原因是,如果我不缩放或移动图像,而是直接点击完成,裁剪就可以了。

我像这样裁剪图像:

- (UIImage *)cropImage:(UIImage*) img toRect:(CGRect)rect {

    CGFloat scale = [[UIScreen mainScreen] scale];

    if (scale>1.0) {        
        rect = CGRectMake(rect.origin.x*scale , rect.origin.y*scale, rect.size.width*scale, rect.size.height*scale);        
    }

    CGImageRef imageRef = CGImageCreateWithImageInRect([img CGImage], rect);
    UIImage *result = [UIImage imageWithCGImage:imageRef scale:self.imageView.image.scale orientation:self.imageView.image.imageOrientation];
    //    UIImage *result = [UIImage imageWithCGImage:imageRef]; 
    CGImageRelease(imageRef);
    return result;
}

从我的主视图的子视图(方形叠加框,如 UIImagePickerController 中)传入一个cropRect。主 UIView 有一个可缩放的 UIImageView 和一个显示裁剪矩形的 UIView。

如何获得“所见即所得”的裁剪以及我必须考虑哪些因素。或者如果我应该以不同的方式实现层次结构或缩放,也许会提出建议。

【问题讨论】:

  • 我也遇到了同样的问题,你有解决办法吗?
  • 对此有什么解决办法吗?有同样的问题。

标签: ios objective-c uiimageview uiimage crop


【解决方案1】:

尝试一个简单的技巧。 Apple 在其网站上提供了示例,以展示如何使用代码放大照片。完成缩放后,使用图形上下文获取边界视图的帧大小,并以此获取图像。例如 Uiview 包含具有缩放图像的滚动视图。所以滚动视图会缩放,你的图像也会缩放,现在获取边界 UIview 的帧大小,并从中创建图像上下文,然后将其保存为新图像。告诉我这是否有意义。

干杯:)

【讨论】:

  • 嗨,山姆,谢谢。我正在尝试在脑海中重建您的建议 - 我显示完整的图像,但只想裁剪我覆盖在图像上的“预览”方块。使用 scrollView 方法我不仅会遇到同样的问题,还会遇到其他视图吗?即我仍然必须将图像放在 UIImageView 中,然后将其添加到 scrollView - 但边界裁剪框不在 scrollView 中,因为我希望它在用户移动/缩放图像时保持静态。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-13
  • 2019-08-08
  • 2010-09-14
  • 2016-02-06
  • 2023-04-11
相关资源
最近更新 更多