Используйте это расширение, чтобы уменьшить размер изображения.
extension UIImage {
func resizeImage(factor: CGFloat) -> UIImage? {
let newWidth = self.size.width * factor // Calculate size from factor.
let newHeight = self.size.height * factor
let size = CGSize(width: newWidth, height: newHeight)
return resizeImage(targetSize: size) // Return image with scaled factor.
}
func resizeImage(targetSize: CGSize) -> UIImage? {
let originalSize = self.size
let widthRatio = targetSize.width / originalSize.width
let heightRatio = targetSize.height / originalSize.height
let ratio = min(widthRatio, heightRatio)
let newSize = CGSize(width: originalSize.width * ratio, height: originalSize.height * ratio)
let rect = CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height)
UIGraphicsBeginImageContextWithOptions(newSize, false, UIScreen.main.scale)
self.draw(in: rect)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage
}
}
Используя это, мы можем использовать ваш код выше для достижения того, что вы пытаетесь сделать.
var imageData: Data = UIImageJPEGRepresentation(edited, 1.0)
while imageData.count < 200000 {
imageData = UIImageJPEGRepresentation(UIImage(data: imageData)!.resizeImage(factor: 0.9)!, 1.0)
// imageData will be incremented down each time by a factor of 0.1 (1.0 - ratio)
}
РЕДАКТИРОВАТЬ: Если вы не хотите включать расширение, вы можете просто использовать imageData = UIImageJPEGRepresentation(imageData, 0.9)
, так как оно будет уменьшаться в 0,1 раза.