Я разрабатываю приложение для iOS в Swift для использования клиентами компании, в которой я работаю. В дополнение к iOS-приложению я также создаю бэкэнд-API с ASP.Net Core. Метод, который я выбрал для отправки изображений, представляет собой сжатое base64-кодированное строковое представление изображения в массиве JSON. Это позволяет сэкономить на пропускной способности и упростить отправку нескольких изображений.
На стороне API я использую .NET Class System.IO.Compression.DeflateStream
для сжатия байтов изображения в памяти перед их кодированием в строку base64 и отправкой их в приложение iOS.
Что касается iOS, меня немного смущает вопрос, каким будет процесс декодирования строки и распаковки данных для создания UIImage
объекта для отображения в UIImageView
.
Это все работает без сжатия, но я хотел попробовать это, чтобы сэкономить на пропускной способности. Однако вполне возможно, что это не оптимальное решение, и я готов измениться. Ниже приведен фрагмент кода, который я использую для преобразования строки base64 в объект Data
, а затем для создания объекта UIImage
из этого.
static func imageComplete(data json: JSON) -> [UIImage] {
var images: [UIImage] = []
for imageString in json.arrayValue {
if let compressedImageData = Data(base64Encoded: imageString.stringValue),
let image = UIImage(data: compressedImageData) {
images.append(image)
}
}
return images
}
TL; DR
В Swift я хочу распаковать байты изображения, закодированные в виде строки Base64, возвращенной из ASP.Net Core WebAPI.