Swiftgram/TelegramUI/ImageCompression.swift
Peter Iakovlev 1b09f8430a no message
2018-04-04 11:04:15 +04:00

49 lines
1.4 KiB
Swift

import Foundation
import AVFoundation
import UIKit
func compressImageToJPEG(_ image: UIImage, quality: Float) -> Data? {
let data = NSMutableData()
guard let destination = CGImageDestinationCreateWithData(data as CFMutableData, "public.jpeg" as CFString, 1, nil) else {
return nil
}
let options = NSMutableDictionary()
options.setObject(quality as NSNumber, forKey: kCGImageDestinationLossyCompressionQuality as NSString)
guard let cgImage = image.cgImage else {
return nil
}
CGImageDestinationAddImage(destination, cgImage, options as CFDictionary)
CGImageDestinationFinalize(destination)
if data.length == 0 {
return nil
}
return data as Data
}
@available(iOSApplicationExtension 11.0, *)
func compressImage(_ image: UIImage, quality: Float) -> Data? {
let data = NSMutableData()
guard let destination = CGImageDestinationCreateWithData(data as CFMutableData, AVFileType.heic as CFString, 1, nil) else {
return nil
}
let options = NSMutableDictionary()
options.setObject(quality as NSNumber, forKey: kCGImageDestinationLossyCompressionQuality as NSString)
guard let cgImage = image.cgImage else {
return nil
}
CGImageDestinationAddImage(destination, cgImage, options as CFDictionary)
CGImageDestinationFinalize(destination)
if data.length == 0 {
return nil
}
return data as Data
}