在 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 放置在透明画布上的主要内容,如果未能解决你的问题,请参考以下文章