Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 将base64字符串转换为图像类并返回_Flutter_Flutter Moor - Fatal编程技术网

Flutter 将base64字符串转换为图像类并返回

Flutter 将base64字符串转换为图像类并返回,flutter,flutter-moor,Flutter,Flutter Moor,我有一个简单的表,我想通过MOOR创建和维护它。下表为定义: class Plants extends Table { IntColumn get id => integer().autoIncrement()(); TextColumn get name => text()(); TextColumn get image => text().map(const ImageConverter()).nullable()(); } 如您所见,我有一个image字段,

我有一个简单的表,我想通过MOOR创建和维护它。下表为定义:

class Plants extends Table {
  IntColumn get id => integer().autoIncrement()();
  TextColumn get name => text()();
  TextColumn get image => text().map(const ImageConverter()).nullable()();
}
如您所见,我有一个
image
字段,我想使用
image
base64
转换并返回。请注意,我指的是颤振,而不是小部件。 我已经发现,图像小部件base64之间发生了转换,但从架构的角度来看,在数据层上使用小部件似乎并不正确。 这就是我到目前为止所做的:

import 'package:image/image.dart';
import 'dart:convert';
import 'dart:typed_data';
import 'package:moor/moor.dart';

class ImageConverter extends TypeConverter<Image, String> {
  Image _imageFromBase64String(String base64String) {
    return null; // <--- missing implementation
  }

  Uint8List _dataFromBase64String(String base64String) {
    return base64Decode(base64String);
  }

  String _base64String(Uint8List data) {
    return base64Encode(data);
  }

  const ImageConverter();
  @override
  Image mapToDart(String fromDb) {
    if (fromDb == null) {
      return null;
    }
    return _imageFromBase64String(fromDb);
  }

  @override
  String mapToSql(Image value) {
    if (value == null) {
      return null;
    }

    return _base64String(value.getBytes());
  }
}
import'package:image/image.dart';
导入“dart:convert”;
导入“dart:键入的_数据”;
导入“包:moor/moor.dart”;
类ImageConverter扩展了TypeConverter{
图像\u imageFromBase64String(字符串base64String){

返回null;//注意问题中的链接不正确。问题涉及
图像
包中的
图像
类-请参阅

您需要一对这样的函数:

Image b64ToImage(int width, int height, String b64) {
  return Image.fromBytes(width, height, base64.decode(b64));
}

String imageToB64(Image image) => base64.encode(image.getBytes());
getBytes
返回NxM 32位像素数组(默认为RGBA顺序),但不知道图像的几何结构。100x200图像将返回80000字节数组,但200x100图像也将返回80000字节数组!重新构建图像时,需要告诉它原始宽度和高度


这就是像BMP这样的文件格式存在的原因。它们用包含宽度、高度、像素深度、像素顺序等信息的标题作为像素数组的前缀。该软件包有BMP解码器,但没有编码器。如果要将宽度和高度编码到字节数组中,从而编码到base64字符串中,可以实现简单的BMP编码器。(见此。)

您是否会使用InstanceImageCodec创建一个编解码器,等待getNextFrame,然后从中提取图像?请注意,要做到这一点,您需要确保将图像字节编码为PNG,以保留几何体之类的内容。getBytes从何而来?图像是否有这样的方法?您是否会提供有关pro的代码片段posal?是的,
getBytes
来自我只看到的
toByteData
。你能提供一个显示其他方法的链接吗?你是说这个吗?那是另一个图像类,而不是你提供链接的那个。是的,我的错,你的链接是正确的。