我敢肯定,这个问题已经从各种不同的角度被问过很多次了,但我还无法在这里找到答案。
我想要实现 我想要做的是显示一个 UIImage,并允许用户在图像上绘制一个矩形,并最终裁剪他们的选择。
到目前为止的研究, 我在这里找到了关于处理裁剪的 SO 的先前问题,但是它们通常处理不变的静态裁剪区域,这确实导致了这种机制的以下限制
- 您感兴趣的图像区域可能位于任何位置,例如,如果您要裁剪路标,它可能位于一张图像的中心,但在另一张图像上左对齐,因此您无法预测哪个区域作物。
- 感兴趣区域的大小和比例可能会发生变化,例如,一张图像可能是该路标的特写,因此裁剪区域会更大,但另一张图像可能是从远处拍摄的,这意味着裁剪区域会更小。
结合上述两个变量,几乎不可能准确预测图像中感兴趣的区域在哪里,所以我依靠用户通过能够在我们周围“绘制”一个框来定义这一点'在这种情况下,对路标感兴趣。
这在 Android 上非常好,因为您可以将所有艰苦的工作委派给一个好的意图,例如:
Intent intent = new Intent("com.android.camera.action.CROP");
但是,我找不到适用于 iOS 的等价物。
我从这个来源找到了这段代码:
- (UIImage *)imageByDrawingCircleOnImage:(UIImage *)image
{
// begin a graphics context of sufficient size
UIGraphicsBeginImageContext(image.size);
// draw original image into the context
[image drawAtPoint:CGPointZero];
// get the context for CoreGraphics
CGContextRef ctx = UIGraphicsGetCurrentContext();
// set stroking color and draw circle
[[UIColor redColor] setStroke];
// make circle rect 5 px from border
CGRect circleRect = CGRectMake(0, 0,
image.size.width,
image.size.height);
circleRect = CGRectInset(circleRect, 5, 5);
// draw circle
CGContextStrokeEllipseInRect(ctx, circleRect);
// make image out of bitmap context
UIImage *retImage = UIGraphicsGetImageFromCurrentImageContext();
// free the context
UIGraphicsEndImageContext();
return retImage;
}
我认为这是裁剪的一个很好的起点(但是它确实有麦田圈),它确实依赖于在调用时预定义要裁剪的区域CGRectMake
。
这个previous question还详细说明了如何进行实际裁剪。
我假设要允许用户绘制矩形,我需要与手势集成?
问题: 如何允许用户在图像视图上绘制矩形,以裁剪该区域?