ios - 裁剪 UIImage 到正方形部分

标签 ios swift uiscrollview uiimage crop

我有一个包含 UIImage 的 UIScrollView。最上面是一个框,用户可以在其中移动图像,以便裁剪该部分。

这张截图更好地解释了它:

enter image description here

因此他们可以滚动图像,直到他们想要的部分位于该框内。

然后我希望能够将 scrollView/UIImage 精确裁剪到该大小并存储裁剪后的图像。

这应该不是很难,但我花了很长时间尝试屏幕截图、UIGraphicsContext 等,但似乎无法让任何工作正常进行。

感谢您的帮助。

最佳答案

我终于想出了如何让它发挥作用。这是代码:

func croppedImage() -> UIImage {

    let cropSize = CGSize(width: 280, height: 280)
    let scale = (imageView.image?.size.height)! / imageView.frame.height
    let cropSizeScaled = CGSize(width: cropSize.width * scale, height: cropSize.height * scale)

    if #available(iOS 10.0, *) {
        let r = UIGraphicsImageRenderer(size: cropSizeScaled)
        let x = -scrollView.contentOffset.x * scale
        let y = -scrollView.contentOffset.y * scale
        return r.image { _ in
            imageView.image!.draw(at: CGPoint(x: x, y: y))
        }
    } else {
        return UIImage()
    }

}

所以它首先计算 imageView 和实际图像的比例。

然后它会创建该裁剪框的 CGSize,如图所示。但是,宽度和高度必须通过比例因子进行缩放。 (例如 280 * 6.5)

您必须检查手机是否运行 iOS 10.0 的 UIGraphicsImageRender - 如果不是,它将无法工作。

用裁剪框大小初始化它。

然后图像必须偏移,这是通过获取 scrollView 的内容偏移、取反并乘以比例因子来计算的。

然后返回此时绘制的图像!

关于ios - 裁剪 UIImage 到正方形部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41899274/

相关文章:

iphone - 检查 scrollview.contentset 是否超过某个 x 值

ios - 对同一自定义单元格使用不同的重用标识符

ios - 以编程方式设置 Storyboard ID

objective-c - CVPixelBufferRef 的优化

Swift 3 - PHFetchResult - enumerateObjects - 'enumerate objects' 的模糊使用

iOS Swift 将 GPS 坐标存储到数组中

ios - UIScrollView 中 subview 的 touchEvent

ios - scrollViewDidScroll 没有被调用(我设置了委托(delegate)!)

ios - 核心数据和大中央调度内部不一致

ios - 无法在我的应用程序中使用 Facebook 登录,页面变成白色,无法进一步操作