swift - 调整大小的图像周围的空白

标签 swift macos nsimage

我正在尝试通过保持纵横比来调整图像大小。但是调整后的图像周围有这个空白区域。

extension NSImage {
func resizeTo(width: CGFloat, height: CGFloat) -> NSImage {
    let ratioX = width / size.width
    let ratioY = height / size.height
    let ratio = ratioX < ratioY ? ratioX : ratioY
    let newHeight = size.height * ratio
    let newWidth = size.width * ratio
    let canvasSize = CGSize(width: width, height: CGFloat(ceil(width/size.width * size.height)))
    let img = NSImage(size: canvasSize)
    img.lockFocus()
    let context = NSGraphicsContext.current()
    context?.imageInterpolation = .high
    draw(in: NSRect(origin: .zero, size: NSSize(width: newWidth,height: newHeight)), from: NSRect(origin: .zero, size: size) , operation: .copy, fraction: 1)
    img.unlockFocus()
    return img
    }
}

enter image description here

我做错了什么?

最佳答案

首先,您从 ratioXratioY 中选择最小的比率,但稍后您使用 ratioX(大小为 width , height * ratioX).我会说您需要使用 newWidthnewHeight 创建 Canvas 。

let canvasSize = CGSize(width: newWidth, height: newHeight)

此外,请注意此脚本会在两个方向调整大小,即会增加小图像的大小。

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

相关文章:

cocoa - Finder/Preview 显示的 NSImage 代码大小不同

swift - 无法将类型 'Int64?' 的值转换为预期的参数类型 'Int'

swift - 在 ViewController 之间传输 TextField 数据

ios - NSCell 和 NSControl 之间的关系/区别是什么?

html - Cocoa Webview HTML 链接到桌面图像文件

objective-c - NSImage 已弃用的方法 : setFlipped replacement

xcode - 更改背景图像时容器 View 动画无法正常工作

objective-c - 在 swift 中从前缀 header 引用类定义

macos - CGWindowListCreateImage 在缩放时产生模糊的 cgImage

objective-c - 在 OS X 上打开 NSImage 时从 EXIF 读取相机数据