Image to base64


#1

Всем привет! Есть необходимость перегонять фото аватара в формат base64 для отправки на сервер. Нашел 2 варианта

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    let image = info[UIImagePickerControllerOriginalImage] as! UIImage
             myPhoto.image = image
            picker.dismiss(animated: true, completion: nil)
            if myPhoto.image != nil {
                if let userFotoImage = (myPhoto?.image) {
                  1 вапиант
                  if let data = UIImageJPEGRepresentation(userFotoImage, 0.5)?.base64EncodedData() {
                      let imageStr = data.base64EncodedString(options: .lineLength64Characters)
                    }
                    2 вариант
                    if let data = UIImagePNGRepresentation(userFotoImage) {
                        let strBase64 = data.base64EncodedString(options: .lineLength64Characters)
                }
                }
            }
}

Тестирую на картинке размером 16 кб. В первом варианте длинна еще более менее, но сервер не хочет с ним работать.
Во втором более 5000 строк. Сервер нормально с ней работает.
Решил протестировать на размере 2 МБ. Симулятор Xcode задумался на несколько минут. Возможно ширина и высота картинки слишком большая

Что делать в такой ситуации? Может как то сжимать еще?


#2
public enum ImageFormat {
    case png
    case jpeg(CGFloat)
}

extension UIImage {
    
    public func base64(format: ImageFormat) -> String? {
        var imageData: Data?
        switch format {
        case .png: imageData = UIImagePNGRepresentation(self)
        case .jpeg(let compression): imageData = UIImageJPEGRepresentation(self, compression)
        }
        return imageData?.base64EncodedString()
    }
}

Проверьте на девайсе.


#3

на данный момент нет возможности. как только появится протестирую.


#4

И еще вопрос - в каком формате камера делает фото? Прочитал статью что это может быть HEIF (High Efficiency Image File) или JPEG. Есть пользователь делает фото в HEIF. Как тогда кодировать?


#5

Нашел такую библиотеку, хотя можно и без нее