【问题标题】:Flutter: convert bitmap (e.g. screenshot) from clipboard to base64 stringFlutter:将位图(例如屏幕截图)从剪贴板转换为 base64 字符串
【发布时间】:2022-08-04 17:51:30
【问题描述】:

这是我目前的要求:
A) 我剪贴板中的截图/位图必须粘贴到应用程序中(平台:主要是 Windows,但也必须在所有其他平台上运行:Android/iOS/Linux/MacOS/Web)

我发现 Flutter 不支持剪贴板中的纯文本以外的任何内容,并且图像/二进制提取请求是 requested by the community

真可惜,但后来我想起了 Flutter supports ffi

Flutter mobile 可以使用 dart:ffi 库来调用原生 C API。 FFI 代表外部功能接口。类似功能的其他术语包括本机界面和语言绑定。

这意味着我可以编写一个自定义的或已经存在的 C/C++ 程序来处理该用例并将其发送给 Flutter。但是,似乎不能保证 C/C++ 程序可以运行到处(Android/iOS/Linux/Windows/MacOS/Web)。

所以,好吧,我的结论是,如果我想满足这个要求,我基本上需要为每个平台编写一个 C/C++ 程序。

这听起来很麻烦,难道不是所有平台上都有一种标准化的方法来从剪贴板中获取动态数据吗?所以我的 Flutter 应用程序处理逻辑?

  • 没有标准化的方法,这就是 Flutter 等跨平台框架存在的原因。不幸的是,如果它尚未实现,那么您将无法自己在所有平台上实现它。如果您决定这样做,通过普通平台渠道而不是 ffi 可能会更容易。

标签: flutter clipboard dart-ffi


【解决方案1】:

Windows 解决方法

所需插件:process_run: ^0.12.3+2 (view on pub.dev)

final res = await Shell().run('''
powershell -c "(Get-Clipboard -Format Image).Save('C:/temp/temporary.png')"
powershell -c "[convert]::ToBase64String((get-content 'C:/temp/temporary.png' -encoding Byte))"
''');
print(res[1].stdout.trim());

res[1].stdout 包含 base64 格式的图像。

我真的不喜欢这个解决方案,但它至少适用于 Windows。

【讨论】:

    【解决方案2】:

    有一个新的包: https://pub.dev/packages/pasteboard

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 2019-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多