用于在For循环内调整图像大小的扩展

时间:2017-10-04 13:19:10

标签: swift macos swift-extensions

我写了一个扩展来调整给定图像的大小:

extension NSImage {
    func resizeImage(width: CGFloat, _ height: CGFloat) -> NSImage {
        let img = NSImage(size: CGSize(width:width, height:height))

        img.lockFocus()
        let ctx = NSGraphicsContext.current()
        ctx?.imageInterpolation = .high
        self.draw(in: NSMakeRect(0, 0, width, height), from: NSMakeRect(0, 0, size.width, size.height), operation: .copy, fraction: 1)
        img.unlockFocus()

        return img
    }
}

但我不知道如何在for循环中使用它:

for image in images
{
   image.resizeImage(width: CGFloat(rwidth),CGFloat(rheight))
   // I intent to resize the image and save it to a file
   // resize -> save to local file
}

这不起作用......也不能将调整后的图像分配给旧图像。我应该创建一个临时变量,将调整大小的图像分配给它并保存吗?我想这会浪费你的记忆。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

无法改变Swift中的扩展名。你必须初始化第二个数组。

使用map作为单行代码:

let resizedImages = images.map { $0.resizeImages(width: CGFloat(rwidth), CGFloat(rheight)) }