#flutter #dart
Вопрос:
Я хочу изменить размер изображения и при запуске моего кода, но процесс изменения размера происходит очень медленно. Мой код, как показано ниже :
void _selectImage() async {
try {
final checkDataImage =
await _imagePicker.pickImage(source: ImageSource.camera);
if (checkDataImage != null) {
print(checkDataImage.name);
print(checkDataImage.path);
setState(() {
pickedImage = checkDataImage;
});
}
} catch (err) {
print(err);
pickedImage = null;
}
final tempDir = await getTemporaryDirectory();
final path = tempDir.path;
Img.Image image = Img.decodeImage(await pickedImage.readAsBytes());
Img.Image smallerImg = Img.copyResize(image, width: 500);
int rand = new Math.Random().nextInt(999999999);
var compressImg = new File('$path/image_$rand.jpg')
..writeAsBytesSync(Img.encodeJpg(smallerImg, quality: 90));
setState(() {
if (!mounted) return;
_imageUpload = compressImg;
});}
Что не так с моим кодом, пожалуйста, помогите ускорить его обработку?
Спасибо за вашу помощь.
Комментарии:
1. Судя по вашему коду, я предполагаю, что вы используете пакет изображений для этих вызовов. Этот пакет полностью написан на Dart без каких-либо зависимостей
dart:io
, поэтому он не выигрывает от скорости машинного кода или аппаратного ускорения. Таким образом, декодирование, кодирование и изменение размера изображения, вероятно, будут очень медленными, поэтому владелец пакета рекомендует выполнять эти процессы в отдельном изолированном потоке.
Ответ №1:
Как говорили другие, package:image
написано на чистом Dart и никогда не будет таким быстрым, как собственные решения, которые могут быть многопоточными и аппаратно ускоренными.
В то время как использование другого изолята остановит задачи с изображением, блокирующие пользовательский интерфейс, если вам нужно сделать это как можно быстрее, я предлагаю вам использовать что-то вроде библиотеки ImageMagick или, если вам нужна только поддержка Android и iOS, package:flutter_image_compress
.
Комментарии:
1. это работает и спасибо