mirror of
https://github.com/stoatchat/for-ios.git
synced 2026-07-18 16:04:32 -04:00
78 lines
2.5 KiB
Swift
78 lines
2.5 KiB
Swift
//
|
|
// UIImage.swift
|
|
// Revolt
|
|
//
|
|
// Created by Angelo on 19/07/2024.
|
|
//
|
|
|
|
import UIKit
|
|
|
|
extension UIImage {
|
|
enum ContentMode {
|
|
case contentFill
|
|
case contentAspectFill
|
|
case contentAspectFit
|
|
}
|
|
|
|
func imageWith(newSize size: CGSize, contentMode: ContentMode) -> UIImage? {
|
|
let aspectWidth = size.width / self.size.width
|
|
let aspectHeight = size.height / self.size.height
|
|
|
|
switch contentMode {
|
|
case .contentFill:
|
|
return imageWith(newSize: size)
|
|
case .contentAspectFit:
|
|
let aspectRatio = min(aspectWidth, aspectHeight)
|
|
return imageWith(newSize: CGSize(width: self.size.width * aspectRatio, height: self.size.height * aspectRatio))
|
|
case .contentAspectFill:
|
|
let aspectRatio = max(aspectWidth, aspectHeight)
|
|
return imageWith(newSize: CGSize(width: self.size.width * aspectRatio, height: self.size.height * aspectRatio))
|
|
}
|
|
}
|
|
|
|
func imageWith(newSize: CGSize) -> UIImage {
|
|
let image = UIGraphicsImageRenderer(size: newSize).image { _ in
|
|
draw(in: CGRect(origin: .zero, size: newSize))
|
|
}
|
|
|
|
return image.withRenderingMode(renderingMode)
|
|
}
|
|
|
|
func imageWith(targetSize: CGSize) -> UIImage {
|
|
let widthRatio = targetSize.width / size.width
|
|
let heightRatio = targetSize.height / size.height
|
|
|
|
var newSize: CGSize
|
|
if(widthRatio > heightRatio) {
|
|
newSize = CGSize(width: size.width * heightRatio, height: size.height * heightRatio)
|
|
} else {
|
|
newSize = CGSize(width: size.width * widthRatio, height: size.height * widthRatio)
|
|
}
|
|
|
|
let rect = CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height)
|
|
|
|
UIGraphicsBeginImageContextWithOptions(newSize, false, 1.0)
|
|
draw(in: rect)
|
|
let newImage = UIGraphicsGetImageFromCurrentImageContext()
|
|
UIGraphicsEndImageContext()
|
|
|
|
return newImage!
|
|
}
|
|
|
|
var roundedImage: UIImage {
|
|
let rect = CGRect(origin:CGPoint(x: 0, y: 0), size: self.size)
|
|
UIGraphicsBeginImageContextWithOptions(self.size, false, 1)
|
|
defer {
|
|
// End context after returning to avoid memory leak
|
|
UIGraphicsEndImageContext()
|
|
}
|
|
|
|
UIBezierPath(
|
|
roundedRect: rect,
|
|
cornerRadius: self.size.height
|
|
).addClip()
|
|
self.draw(in: rect)
|
|
return UIGraphicsGetImageFromCurrentImageContext()!
|
|
}
|
|
}
|