当我在页面上按ctrl+va gist的代码时,我尝试从剪贴板获取图像,这将对获取的图像内容console.log进行编码。

我发现图像内容是带有特殊前缀的长base64字符串:


如何将其解码为二进制?我试图删除前缀文件中。但是文件无法显示,出现invalid format错误。

但是,如果我将整个字符串粘贴到http://base64online.org/decode/,它也可以播放图像。

我使用的base64库是https://github.com/wstrange/base64,我的代码是:

import 'package:base64_codec/base64_codec.dart';

var body = /* the long str above */;

var prefix = "data:image/png;base64,";
var bStr = body.substring(prefix.length);
var bs = Base64Codec.codec.decodeList(bStr.codeUnits);
var file = new File("image.png");
file.writeAsBytesSync(bs);

我不知道哪里错了:(

最佳答案

尝试使用Dart SDK中的crypto包。这将创建一个可以正常打开的image.png(我相信这是此图像...)

library foo;

import 'package:crypto/crypto.dart';
import 'dart:io';

void main() {

  var body = "data:image/png;base64,iVBORw0KGgoAAAANSUh... snip";
  var prefix = "data:image/png;base64,";
  var bStr = body.substring(prefix.length);
  var bytes = CryptoUtils.base64StringToBytes(bStr); // using CryptoUtils from Dart SDK
  var file = new File("image.png");
  file.writeAsBytesSync(bytes);
}
您需要将crypto添加到pubspec.yaml中:
dependencies:
  crypto: any
链接到https://github.com/wstrange/base64的库,在自述文件中也有说明:

另请参阅How to native convert string -> base64 and base64 -> string

10-05 20:23
查看更多