在 Swift 中将 NSImage 放置在透明画布上

Posted

技术标签:

【中文标题】在 Swift 中将 NSImage 放置在透明画布上【英文标题】:Placing an NSImage on a transparent canvas in Swift 【发布时间】:2018-01-07 12:29:53 【问题描述】:

我正在寻找一种通过将现有图像放置在 Swift 中的透明画布上来创建 NSImage 的方法。例如,它可以是一个函数,可以获取 200 x 300 的 NSImage 并将其作为 300 x 300 的 NSImage (两边各有 50 px 的透明画布)返回。

我发现了这个 this 适用于 ios,但我不知道如何将其转换为 macOS。

我不知道它会有什么用,但这是我已经开始工作的扩展:

extension NSImage 
func squareIt(canvasSize: CGSize)->NSImage 
    var imageToReturn:NSImage!

    //make a CGRect with desired size
    let rect = CGRect(origin: .zero, size: canvasSize)

    //Center and draw image
    let centeredImageRect = CGRect(x: (canvasSize.width - self.size.width) / 2,
                                   y: (canvasSize.height - self.size.height) / 2,
                                   width: self.size.width,
                                   height: self.size.height)

    self.draw(in: centeredImageRect)

    //???? Place the original image in the rect and return the result as an NSImage

    return imageToReturn


如果有人能指出正确的方向,我将不胜感激。

【问题讨论】:

请展示您尝试过的内容,让我们知道您遇到了什么问题。 感谢您的评论。老实说,我不知道从哪里开始。我已经编辑了原始帖子以显示我迄今为止取得的有限进展。 【参考方案1】:

经过大量挖掘,我终于能够在here 发布的一组 NSImage 扩展中找到解决方案。

我所要做的就是修改“resizeWhileMaintainingAspectRatioToSize”函数,通过替换将图像保持在指定大小的范围内:

if widthRatio > heightRatio 
        newSize = NSSize(width: floor(self.width * widthRatio), height: floor(self.height * widthRatio))
     else 
        newSize = NSSize(width: floor(self.width * heightRatio), height: floor(self.height * heightRatio))
    

为:

if widthRatio > heightRatio 
        newSize = NSSize(width: floor(self.width * heightRatio), height: floor(self.height * heightRatio))
     else 
        newSize = NSSize(width: floor(self.width * widthRatio), height: floor(self.height * widthRatio))
    

这让我可以使用“裁剪”功能将画布扩展到所需的大小,而不是裁剪图像。

【讨论】:

以上是关于在 Swift 中将 NSImage 放置在透明画布上的主要内容,如果未能解决你的问题,请参考以下文章

Swift NSImage到CGImage

如何通过 Swift 使用 NSSlider 为 NSImage 类调整亮度?

如何在 swift 中从 nsimage 创建灰度图像?

在 Swift xCode 中将 UI 导航栏设置为半透明

从像素数组问题中获取 NSImage (Swift)

在 macOS 上使用 Swift 在 PDF 上绘图