another.im-ios/ConversationsClassic/View/UIToolkit/UIImage+Crop.swift
2024-07-10 21:57:45 +02:00

43 lines
1.7 KiB
Swift

import UIKit
extension UIImage {
func scaleAndCropImage(toExampleSize _: CGSize, completion: @escaping (UIImage?) -> Void) {
DispatchQueue.global(qos: .background).async {
guard let cgImage = self.cgImage else {
DispatchQueue.main.async {
completion(nil)
}
return
}
let contextImage: UIImage = .init(cgImage: cgImage)
var contextSize: CGSize = contextImage.size
var posX: CGFloat = 0.0
var posY: CGFloat = 0.0
let cgwidth: CGFloat = self.size.width
let cgheight: CGFloat = self.size.height
// Check and handle if the image is wider than the requested size
if contextSize.width > contextSize.height {
posX = ((contextSize.width - contextSize.height) / 2)
contextSize.width = contextSize.height
} else if contextSize.width < contextSize.height {
// Check and handle if the image is taller than the requested size
posY = ((contextSize.height - contextSize.width) / 2)
contextSize.height = contextSize.width
}
let rect: CGRect = .init(x: posX, y: posY, width: cgwidth, height: cgheight)
guard let contextCg = contextImage.cgImage, let imgRef = contextCg.cropping(to: rect) else {
DispatchQueue.main.async {
completion(nil)
}
return
}
let image: UIImage = .init(cgImage: imgRef, scale: self.scale, orientation: self.imageOrientation)
completion(image)
}
}
}