从NSImage切割尺寸的正方形并缩放以适合较小的正方形

时间:2017-05-23 10:00:44

标签: swift image cocoa nsimage nsimageview

我想知道可能与否,如果是,我怎么能达到这个目标。 我有大小为120x120的NSImageView。 我想把NSImage放在里面,但是比常规方式有点不同。 所以,假设我有一个500x800的图像,我想放在方形视图中。 我想要达到的目标是 - 从初始图像图像的中心开始,取大小为500x500的方形区域,然后缩小该方块,使其适合120x120尺寸的nsimageview。

有没有办法做到这一点?

也不好为该缩略图创建单独的图像文件。

1 个答案:

答案 0 :(得分:1)

好的,所以我自己也找到了如何做到这一点。

1)您需要从现有图像中剪切目标尺寸的矩形 2)从该矩形和图像数据创建NSImage。

        var originalImage : NSImage = NSImage()

        if(FileManager.default.fileExists(atPath: self.fileUrl.absoluteURL.path))
        {
            originalImage = NSImage(byReferencing: self.fileUrl.absoluteURL)
        }
        else
        {
            originalImage = NSImage(named: "NoImage")!
        }

        let originalSize = originalImage.size
        var sideSize : CGFloat = 0
        //2. get size of square, by checking what side is smaller
        if(originalSize.width > originalSize.height)
        {
            sideSize = originalSize.height
        }
        else
        {
            sideSize = originalSize.width
        }

        var originalImageRect : CGRect = CGRect(x: 0, y: 0, width: originalSize.width, height: originalSize.height)
        guard let imageRef = originalImage.cgImage(forProposedRect: &originalImageRect, context: nil, hints: nil) else { return }

        let thumbnailRect = CGRect(x: (originalSize.width / 2 - sideSize / 2), y: (originalSize.height / 2 - sideSize / 2), width: sideSize, height: sideSize)

        let drawImage = imageRef.cropping(to: thumbnailRect);

        let newImage = NSImage(cgImage: drawImage!, size: NSSize(width: SLIDE_WIDTH, height: SLIDE_HEIGHT))

        OperationQueue.main.addOperation{
            self.thumbnail = newImage
        }