【问题标题】:Cut square of size from NSImage and scale that to fit smaller square从 NSImage 中切割出正方形并缩放以适合更小的正方形
【发布时间】:2017-05-23 10:00:44
【问题描述】:

我想知道这是否可能,如果是,我怎样才能做到这一点。 我有大小为 120x120 的 NSImageView。 我想在里面放一个 NSImage ,但按常规方式缩放有点不同。 所以,假设我有一个 500x800 的图像,我想把它放在方形视图中。 我想要达到的是 - 从初始图像图像的中心获取大小为 500x500 的正方形区域,然后缩小该正方形以适合 nsimageview 的 120x120 大小。

有什么办法吗?

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

【问题讨论】:

    标签: swift image cocoa nsimage nsimageview


    【解决方案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
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-21
      • 2021-01-09
      • 2021-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多