У меня есть изображение, которое я преобразовал в base64, которое не удается, когда я пытаюсь декодировать, потому что оно не делится на 4. Я добавил код, чтобы проверить это, и соответственно добавил отступы. Этот код работает для строк меньшего размера, которые я тестирую, но при использовании строк большего размера он фактически возвращает строку меньшего размера с сотнями символов меньшего размера.
Я использую это для обработки изображений, поэтому строки представляют собой изображения в кодировке base64.
imageView = imageButton.backgroundImage(for: UIControl.State.normal)
if var strBase64 = imageView.toBase64() {
print("char count 1 ", strBase64.count)
let remainder = strBase64.count % 4
if remainder > 0 {
print("remainder is greater than zero = ", remainder)
print("char count 2 ", strBase64.count)
let strBase64 = strBase64.padding(toLength: strBase64.count + 4 - remainder, withPad: "=", startingAt: 0)
print("char count 3 ", strBase64.count)
}
if let imageData = Data(base64Encoded: strBase64) {
if let decodedimage = UIImage(data: imageData) {
print("unwrapped")
}
} else {
print("failed")
}
}
extension UIImage{
func toBase64() -> String? {
guard let imageData = self.jpegData(compressionQuality: 0.2) else { return nil }
return imageData.base64EncodedString(options: Data.Base64EncodingOptions.lineLength64Characters)
}
}
Вывод:
char count 1 42054
remainder is greater than zero = 2
char count 2 42054
char count 3 41419
failed
Обновление:
Я удалил опцию lineLength64Characters, которая, похоже, устранила проблему, но я не уверен, почему. Я заметил, что все фотографии теперь возвращаются как кратные 4, так что это может быть частью этого. Спасибо за помощь пользователям ниже.