#dart #flutter
#dart #flutter
Вопрос:
У меня есть этот метод, который загружает фотографию с телефона пользователя в память, изменяет ее размер и кодирует как JPEG:
List<int> processPersonProfilePhoto(File file) {
var rawPhoto = file.readAsBytesSync();
var jpg = Image.decodeJpg(rawPhoto);
jpg = Image.copyResize(jpg, 512);
return Image.encodeJpg(jpg, quality: 70);
}
Я использую описанный выше метод для отдельного изолированного, через:
var jpgByteArray = await compute(processPersonProfilePhoto, file);
Весь этот процесс иногда занимает 20-30 секунд (режим выпуска даже хуже, чем debug), и я работаю на устройствах среднего и высокого класса.
Это пакет, который я использую для обработки:
image: ^2.0.7
Что я делаю не так? Как это улучшить?
PS.: Я провел еще несколько отладок и понял, что строка, обработка которой занимает гораздо больше времени, является разделяющей:
var jpg = Image.decodeJpg(rawPhoto);
Комментарии:
1. На какой модели телефона вы используете его?
2. режим отладки работает медленно, попробуйте релизную версию
3. @Dylan Я тестирую на устройствах среднего и высокого класса. Время обработки не слишком отличается от режимов отладки до выпуска.
4. Я использую тот же пакет, мое исходное изображение составляет около 800 КБ, а измененное изображение — около 100 КБ, и для обработки требуется около 3 секунд. насколько велики ваши исходные и измененные изображения?
5. И я использую реальное Android-устройство низкого уровня
Ответ №1:
Я узнал, что это проблема библиотеки. Вы можете отслеживать проблему на странице библиотеки github, есть много проблем, жалующихся на медлительность. (https://github.com/brendan-duncan/image/issues/104 )
Пока это не исправлено, используйте вместо этого эту библиотеку: https://pub.dartlang.org/packages/flutter_image_compress
Редактировать: кажется, теперь, когда библиотека исправила проблему медлительности при сборках РЕЛИЗОВ: https://github.com/brendan-duncan/image/issues/104#issuecomment-490794535