Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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
Image 如何在Dart FLATTER中删除图像周围的空白?_Image_Flutter_Image Processing_Dart_Transparency - Fatal编程技术网

Image 如何在Dart FLATTER中删除图像周围的空白?

Image 如何在Dart FLATTER中删除图像周围的空白?,image,flutter,image-processing,dart,transparency,Image,Flutter,Image Processing,Dart,Transparency,用户向屏幕写入内容,创建图像并发送到我们的平台。每幅图像都是一幅白色背景的图片(手写文本)。我想删除图像的所有白色部分,让用户只写内容。是否可以在颤振中使用图像处理?如果可能,如何处理?您可以在Dart中进行图像处理(颤振只是一个UI框架,图像处理是一种算法,因此与UI无关,而是与语言本身有关) 您可以尝试使用该软件包,打开图像,解码其字节,并在那里应用任何图像处理算法 此库将帮助您提取图像字节,但如果您需要更核心的图像处理算法,如OpenCV中的算法,并且您不太热衷于自己实现这些算法,则可能需

用户向屏幕写入内容,创建图像并发送到我们的平台。每幅图像都是一幅白色背景的图片(手写文本)。我想删除图像的所有白色部分,让用户只写内容。是否可以在颤振中使用图像处理?如果可能,如何处理?

您可以在Dart中进行图像处理(颤振只是一个UI框架,图像处理是一种算法,因此与UI无关,而是与语言本身有关)

您可以尝试使用该软件包,打开图像,解码其字节,并在那里应用任何图像处理算法

此库将帮助您提取图像字节,但如果您需要更核心的图像处理算法,如OpenCV中的算法,并且您不太热衷于自己实现这些算法,则可能需要执行以下操作:

  • 在pub.dev中测试任何OpenCV包的颤振/飞镖。我不能推荐,因为我从来没用过

  • 使用方法通道调用与本机平台(Android/iOS)的OpenCV库交互,传递图像并在那里进行处理,然后将其返回到Flatter


  • 不理想,但完全可行。

    首先,您需要安装软件包

    然后使用以下代码删除背景

    import 'package:image/image.dart' as Img;
    
    Future<Uint8List> removeWhiteBackgroundFromImage(
        Uint8List bytes) async {
      Img.Image image = Img.decodeImage(bytes);
      Img.Image transparentImage = await _colorTransparent(image, 255, 255, 255);
      var newPng = Img.encodePng(transparentImage);
      return newPng;
    }
    
    Future<Img.Image> _colorTransparent(
        Img.Image src, int red, int green, int blue) async {
      var pixels = src.getBytes();
      for (int i = 0, len = pixels.length; i < len; i += 4) {
        if (pixels[i] == red && pixels[i + 1] == green && pixels[i + 2] == blue) {
          pixels[i + 3] = 0;
        }
      }
    
      return src;
    }
    

    参考链接:

    您的意思是要删除所有背景,还是只修剪多余的空白?
    Uint8List imageBytes = File(imageFilePath).readAsBytesSync();