У меня есть этот метод, который загружает фотографию с телефона пользователя в память, изменяет ее размер и кодирует в формате 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 секунд (режим релиза еще хуже, чем отладка), и я работаю на устройствах среднего и высокого уровня.
Это пакет, который я использую для обработки:
image: ^2.0.7
Что я делаю неправильно? Как это улучшить?
PS.: Я сделал еще немного отладки и понял, что строка, которая обрабатывается намного дольше, является расшифровкой:
var jpg = Image.decodeJpg(rawPhoto);
режим отладки медленный, попробуйте релизную версию
@Dylan Я тестирую на устройствах среднего и высокого уровня. Время обработки не сильно отличается от режимов отладки к режимам выпуска.
Я использую тот же пакет, размер моего исходного изображения составляет около 800 КБ, размер измененного изображения составляет около 100 КБ, и обработка занимает около 3 секунд. насколько велики ваши оригинальные и измененные изображения?
И я использую настоящее Android-устройство младшего класса.
Вы пытались указать это как проблему на странице github для плагина?
@CopsOnRoad Нет, я пытаюсь понять, не делаю ли я что-то неправильно, прежде чем раздражать их проблемой.
Я узнал, что это проблема библиотеки. Вы можете отследить проблему на странице библиотеки на github, там много вопросов, жалующихся на медлительность. (https://github.com/brendan-duncan/image/issues/104)
Пока это не будет исправлено, используйте вместо этого эту библиотеку: https://pub.dartlang.org/packages/flutter_image_compress
Редактировать: кажется, теперь библиотека устранила проблему медлительности в сборках RELEASE: https://github.com/brendan-duncan/image/issues/104#issuecomment-490794535
На какой модели телефона вы работаете?