绘制带有比例和平移的 UIImage

Draw UIImage with scale and translate

我正在尝试绘制 UIImage 的“放大”部分,但找不到方法...

假设我有一个尺寸为 1000x1000 的图像,我放大到左上角(x:0,y:0 宽度:500,高度:500),我想将该部分绘制到另一个1000x1000 图片。

我正在使用 UIGraphicsImageRenderer 但 UIImage draw 方法不接受任何 source 矩形,只接受目标 rect(并且它绘制整个图像) .

我能够通过在 draw 方法中指定一个更大的矩形来实现我想要的,但是当放大级别很大(内存不足)时会崩溃。

这是我试过的:

let srcImg: UIImage = {some UIImage sized 1000x1000}
let renderer = UIGraphicsImageRenderer(size: CGSize(width: 1000, height: 1000))
let scaled = renderer.image { ctx in
    srcImg.draw(in: CGRect(origin: CGPoint.zero, size: CGSize(width: 2000, height: 2000)))
}

基本上我正在尝试实现类似 HTML5 canvas 的 drawImage API 的东西,它同时获得 src 和 dst 矩形...

谢谢。

使用此答案的 UIImage 扩展名:

如果我对你的问题的理解正确——你想从 1000x1000 的图像中剪切 top-left 500x500 像素,并将其缩放到 1000x1000——下面是一个使用该扩展的简单示例:

    if let img1000x1000 = UIImage(named: "img1000x1000") {
        if let topLeft500x500 = img1000x1000.cropped(to: CGRect(x: 0, y: 0, width: 500, height: 500)) {
            if let new1000x1000 = topLeft500x500.filled(to: CGSize(width: 1000, height: 1000)) {
                // do something with new 1000x1000 image
                print()
            }
        }
    }