Вырежьте квадрат размера из NSImage и масштабируйте его так, чтобы он соответствовал меньшему квадрату

Мне интересно, возможно это или нет, и если да, то как я могу этого достичь. У меня есть NSImageView размером 120x120. Я хочу поместить NSImage в это, но масштабируется немного иначе, чем обычным способом. Итак, допустим, у меня есть изображение 500x800, которое я хочу поместить в квадратный вид. То, чего я хочу достичь, - это взять квадрат размером 500х500 справа от центра исходного изображения, а затем уменьшить его до размера 120x120 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
        }
Другие вопросы по тегам