Изменение размера изображения очень медленно при его обработке

#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. это работает и спасибо