Почему UIImage (data :) не создает изображение с размером сжатого файла? - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь уменьшить размер изображения с помощью приведенного ниже кода после преобразования UIImage в сжатое представление JPEG и обратно в UIImage. Файл UIImage все еще слишком большой. Как я могу уменьшить размер файла UIImage?

func changeFileSize()->UIImage{
        var needToCompress:Bool = true
        var compressingValue:CGFloat = 1.0
        let bcf = ByteCountFormatter()
        while needToCompress && compressingValue > 0.0{
            let data =  image.jpegData(compressionQuality: compressingValue)!

            if data.count < 1024 * 100{
                needToCompress = false
                image = UIImage(data: data)
                bcf.allowedUnits = [.useKB] // optional: restricts the units to MB only
                bcf.countStyle = .file
                var  newImage = UIImage(data: data)

               let string = bcf.string(fromByteCount: Int64(newImage!.jpegData(compressionQuality: compressingValue)!.count))
                print("Image Pixels: \(CGSize(width: newImage!.size.width*newImage!.scale, height: newImage!.size.height*newImage!.scale))")
                print("final formatted result to be returned: \(string)")
                print("New comrpession value: \(compressingValue)")
                return UIImage(data:  (newImage?.jpegData(compressionQuality: compressingValue))!)!
                break
            }
            else{
                compressingValue -= 0.1
                bcf.allowedUnits = [.useKB] // optional: restricts the units to MB only
                bcf.countStyle = .file
                let string = bcf.string(fromByteCount: Int64(image.jpegData(compressionQuality: compressingValue)!.count))
                print("formatted result: \(string)")
                print("New comrpession value: \(compressingValue)")
            }
        }

        bcf.allowedUnits = [.useKB] // optional: restricts the units to MB only
        bcf.countStyle = .file
        let string = bcf.string(fromByteCount: Int64(image.jpegData(compressionQuality: 1.0)!.count))


           print("formatted result: \(string)")
            compressionLabel.text = string

            print("Image Pixels: \(CGSize(width: image.size.width*image.scale, height: image.size.height*image.scale))")
return image
        }

1 Ответ

0 голосов
/ 02 октября 2018

Нет такого понятия, как сжатый UIImage.Вот и все точка UIImage.UIImage - это растровое изображение , с помощью которого изображение фактически рисуется - то, что вы, вероятно, считаете действительными пикселями изображения.Данные JPEG - это просто данные, использующие сжатие.Но чтобы превратить это в UIImage, мы должны распаковать данные и получить пиксели.

...