gpt4 book ai didi

快速调整图像大小并保存分辨率问题

转载 作者:搜寻专家 更新时间:2023-11-01 07:13:19 25 4
gpt4 key购买 nike

我对图片大小有疑问。

最初我有任何尺寸的图像,我将其裁剪成正方形

func cropToSquare() -> NSImage? {
let dimensions = [self.width, self.height]
let lessValue = dimensions.min()
let x = floor((self.width - lessValue!) / 2)
let y = floor((self.height - lessValue!) / 2)
let frame = NSMakeRect(x, y, lessValue!, lessValue!)
guard let rep = self.bestRepresentation(for: frame, context: nil, hints: nil) else {
return nil
}
let img = NSImage(size: NSSize(width: lessValue!, height: lessValue!))
img.lockFocus()
defer { img.unlockFocus() }
if rep.draw(in: NSMakeRect(0, 0, lessValue!, lessValue!),
from: frame,
operation: NSCompositingOperation.copy,
fraction: 1.0,
respectFlipped: false,
hints: [:]) {
return img
}
return nil
}

接下来我调整图片大小

func copyWithSize(size: NSSize) -> NSImage? {
let frame = NSMakeRect(0, 0, size.width, size.height)
guard let rep = self.bestRepresentation(for: frame, context: nil, hints: nil) else {
return nil
}
let img = NSImage(size: size)
img.lockFocus()
defer { img.unlockFocus() }
if rep.draw(in: frame) {
print(size, frame)
return img
}
return nil
}

最终使用此 answer 中的 png 扩展名将图像保存到文件中

通常一切正常...除了图像大小。当我从某个尺寸开始并调整到 100x100 时,我保存的图像有两倍尺寸 (200x200)。

我的代码有什么问题?

最佳答案

图像以 @2x 绘制,因为您的 Mac 配备 Retina 显示屏。

使用 lockFocus 创建一个新图像以显示在屏幕上,如果您想将其保存到文件中,这是不切实际的。

您可以使用以下方式获取比例因子:

NSScreen.main.backingScaleFactor

并相应地调整调整大小。

但最好的解决方案是创建一个 NSBitmapImageRep 并手动将其 size 设置为您想要的图像大小。

关于快速调整图像大小并保存分辨率问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43678623/

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