В моем приложении пользователь может получить фотографию из галереи, отредактировать ее и затем сохранить в каталоге документов.
Требования к изображению:
Размер: 512X512
Размер: меньше, когда 100Kb
Изображения в основном являются стикерами WhatsApp
Мои файлы 250 Кб +
Я уже много пробовал, даже пытался сохранить файлы в формате png8 так:
func normalize() -> UIImage {
let size = CGSize(width: 512, height: 512)
let genericColorSpace = CGColorSpaceCreateDeviceRGB()
let context = CGContext(data: nil, width: 512, height: 512, bitsPerComponent: 8, bytesPerRow: 4 * 512, space: genericColorSpace, bitmapInfo: CGImageAlphaInfo.premultipliedLast.rawValue)
context?.interpolationQuality = .default//(thumbBitmapCtxt!, CGInterpolationQuality.default)
let destRect = CGRect(x: 0, y: 0, width: size.width, height: size.height)
context?.draw(self.cgImage!, in: destRect)
let tmpThumbImage = context?.makeImage()
let result = UIImage(cgImage: tmpThumbImage!) //, scale: 1, orientation: .up)
return result
}
этот метод заставляет изображения выглядеть плохо, но размер даже увеличивается до 300Kb
Если кто-нибудь знает, как с этим бороться, пожалуйста, помогите мне.
Обратите внимание, мне не нужен JPEG, мне нужен PNG с прозрачным фоном
Кроме того, это может быть полезно. В моем приложении у меня есть несколько инструментов редактирования, таких как лассо и ластик. Все они сделаны с UIGraphicsImageContext
так:
func erase(fromPoint: CGPoint, toPoint: CGPoint) {
UIGraphicsBeginImageContextWithOptions(lassoImageView.bounds.size, false, 1)
let context = UIGraphicsGetCurrentContext()
lassoImageView.layer.render(in: context!)
context?.move(to: fromPoint)
context?.addLine(to: toPoint)
context?.setLineCap(.round)
context?.setLineWidth(CGFloat(eraserBrushWidth))
context?.setBlendMode(.clear)
context?.strokePath()
lassoImageView.image = UIGraphicsGetImageFromCurrentImageContext()
croppedImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
}
Может, что-то не так с моей реализацией UIGraphicsBeginImageContextWithOptions
?
Спасибо за любую помощь