我的图像尺寸有问题。
最初我的图像有任何尺寸,我裁剪到正方形
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)。
我的代码出了什么问题?
答案 0 :(得分:2)
图片正在@2x
中绘图,因为您的Mac配有Retina显示屏。
使用lockFocus
创建一个新图像以便在屏幕上显示,如果要将其保存到文件中,这是不切实际的。
您可以使用以下方式获取缩放系数:
NSScreen.main.backingScaleFactor
并相应调整您的调整大小。
但最好的解决方案是创建NSBitmapImageRep
并手动将其size
设置为您想要图片的尺寸。