为什么 Flutter (dart) 处理图像这么慢?

Dan*_*ira 4 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);
}
Run Code Online (Sandbox Code Playgroud)

我在一个单独的隔离上运行上面的方法,通过:

var jpgByteArray = await compute(processPersonProfilePhoto, file);
Run Code Online (Sandbox Code Playgroud)

整个过程有时需要 20 - 30 秒(发布模式甚至比调试更糟糕)而且我在中高端设备上运行。

这是我用来处理的包:

image: ^2.0.7
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?如何改善?

PS。:我做了更多的调试,并意识到需要更长时间来处理的那一行是解压缩的:

var jpg = Image.decodeJpg(rawPhoto);
Run Code Online (Sandbox Code Playgroud)

Dan*_*ira 6

我发现这是一个图书馆问题。您可以在 lib 的 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