gpt4 book ai didi

swift - 调整大小后的图像周围有白色边框

转载 作者:行者123 更新时间:2023-12-03 17:46:00 38 4
gpt4 key购买 nike

我正在使用以下代码来调整图像大小。但我总是在底部看到白色边框

 func resize(withSize targetSize: NSSize) -> NSImage? {

let size=NSSize(width: floor((targetSize.width/(NSScreen.main?.backingScaleFactor)!)), height:floor( (targetSize.height/(NSScreen.main?.backingScaleFactor)!)))

let frame = NSRect(x: 0, y: 0, width: floor(size.width), height: floor(size.height))

guard let representation = self.bestRepresentation(for: frame, context: nil,hints: nil) else {
return nil
}

let image = NSImage(size: size, flipped: false, drawingHandler: { (_) -> Bool in
return representation.draw(in: frame)
})

return image
}

我尝试使用floor函数对值进行四舍五入。但仍然是同样的问题。

enter image description here

最佳答案

extension NSImage {
func resize(withSize targetSize: NSSize) -> NSImage? {
let ratioX = targetSize.width / size.width / (NSScreen.main?.backingScaleFactor ?? 1)
let ratioY = targetSize.height / size.height / (NSScreen.main?.backingScaleFactor ?? 1)
let ratio = ratioX < ratioY ? ratioX : ratioY
let canvasSize = NSSize(width: size.width * ratio, height: size.height * ratio)
let frame = NSRect(origin: .zero, size: canvasSize)
guard let representation = bestRepresentation(for: frame, context: nil, hints: nil)
else { return nil }
return NSImage(size: canvasSize, flipped: false) { _ in representation.draw(in: frame) }
}
}
<小时/>
let image = NSImage(contentsOf: URL(string: "/image/Xs4RX.jpg")!)!
let resized = image.resize(withSize: .init(width: 400, height: 300)) // w 267 h 300

如果您想考虑屏幕比例,只需在计算ratioX和ratioY时从方法中删除除法(NSScreen.main?.backingScaleFactor ?? 1)

关于swift - 调整大小后的图像周围有白色边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61030581/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com