aboutsummaryrefslogtreecommitdiff
path: root/Captura/Core Extensions/CGImage+resize.swift
blob: 9d1adaa047a881705c9a138aaeed7197a4227ae3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/*
 Copyright (C) 2024 Rubén Beltrán del Río

 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program. If not, see https://captura.tranquil.systems.
 */
import CoreGraphics

extension CGImage {
  func resize(by scale: CGFloat) -> CGImage? {
    let width = Int(CGFloat(self.width) / scale)
    let height = Int(CGFloat(self.height) / scale)

    let bitsPerComponent = self.bitsPerComponent
    let colorSpace = self.colorSpace ?? CGColorSpace(name: CGColorSpace.sRGB)!
    let bitmapInfo = self.bitmapInfo.rawValue

    guard
      let context = CGContext(
        data: nil, width: width, height: height, bitsPerComponent: bitsPerComponent, bytesPerRow: 0,
        space: colorSpace, bitmapInfo: bitmapInfo)
    else {
      return nil
    }

    context.interpolationQuality = .high
    context.draw(self, in: CGRect(x: 0, y: 0, width: width, height: height))

    return context.makeImage()
  }
}