【问题标题】:Crop UIImage to square portion将 UIImage 裁剪为正方形部分
【发布时间】:2017-06-13 10:45:05
【问题描述】:

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

这个截图解释得更好:

所以他们可以滚动图像,直到他们想要的部分在那个框内。

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

这应该不是很难,但我已经花了很长时间尝试屏幕截图、UIGraphicsContext 等,但似乎无法得到任何工作。

感谢您的帮助。

【问题讨论】:

标签: ios swift uiscrollview uiimage crop


【解决方案1】:

我终于想出了如何让它工作。代码如下:

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 - 如果不是,它将无法工作。

用裁剪框大小初始化它。

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

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

【讨论】:

    猜你喜欢
    • 2017-11-10
    • 1970-01-01
    • 2012-12-21
    • 2013-07-27
    • 2012-06-17
    • 2017-06-20
    • 2011-05-23
    • 2011-05-30
    • 2011-09-25
    相关资源
    最近更新 更多