Как показать предварительный просмотр изображения перед загрузкой в iOS?
Как отобразить предварительное изображение перед загрузкой фактического изображения.? WhatsApp делает похожую вещь, перед загрузкой своего предварительного изображения. Мой вопрос, как отобразить изображение для предварительного просмотра?
Предварительный просмотр изображения перед загрузкой...
Выше изображения из приложения WhatsApp, для лучшего понимания моего вопроса..
3 ответа
- На сервере генерируют вторую, очень низкую версию разрешения изображения, иногда называемую миниатюрой.
- Скачать этот эскиз
- Представьте миниатюру, возможно с размытием, чтобы покрыть эффект пикселизации
Один из подходов заключается в том, чтобы сервер отправлял миниатюру полного изображения с очень низким разрешением непосредственно клиенту, используя соединение с открытым сокетом (которое обычно используется для приложений чата).
Таким образом, клиенту не нужно запускать асинхронную операцию загрузки, чтобы загрузить миниатюру, чтобы он мог сразу представить миниатюру пользователю (с некоторым наложением или размытием)
Чтобы отправить его через открытый сокет, сервер может преобразовать миниатюру с низким разрешением в строку base64 и отправить ее в виде строки.
Вот лучшее решение, использующее thumbnailURL или thumbnailData, так как у вас есть кешированные изображения, выбрасываемые alamofire, SDWebImage ...
это просто и идеально с точки зрения производительности
Для thumbnailURL он принимает только локальные пути:
- получить путь к файлу для кэшированного изображения
- создать объект URL из префикса пути к файлу с помощью "file: //"
"файл://". указать, что это локальный путь
if let path = SDImageCache.shared().defaultCachePath(forKey: item.url_thumbnail), let url = URL(string: "file://\(path)") {
attributeSet.thumbnailURL = url
}
Для миниатюрных данных
просто назначьте локальный путь URL
attributeSet.thumbnailData = try? Data(contentsOf: url)
отладить и узнать, что происходит просто
do { attributeSet.thumbnailData = try Data(contentsOf: url) } catch (let error as NSError) { print(error) }