Обработка флаттера, вызывающая пикселизацию - PullRequest
1 голос
/ 16 апреля 2020

Работа над флаттерным проектом, который должен делать фотографии и изменять размер / обрезать изображения до 640/420 (15:10) перед загрузкой на сервер, но они, похоже, слишком сильно теряют качество и пикселируются.

      img.Image image = img.decodeImage(a2);
      double width = (image.height / 10) * 15;
      image = img.copyCrop(image, ((image.width - width) / 2).round(), 0, width.round(), image.height);
      resized = img.encodeJpg(img.copyResize(image, width:640, interpolation: img.Interpolation.cubic));

В настоящее время используется камера для съемки с разрешением 720p (1280x720) и плагин image для кадрирования и изменения размера с использованием средней интерполяции.

Я в основном интересно, является ли это лучшим способом обработки изображения, чтобы сохранить наибольшее качество, или есть лучший метод для этого варианта использования.

1 Ответ

0 голосов
/ 23 апреля 2020

вы должны попробовать этот метод, я использовал следующий метод для себя, и он работает как шарм, изображение тоже не теряет качества, а размер слишком сжатый

final _tempDir = await getTemporaryDirectory();
    final _path = _tempDir.path;
    im.Image imageFile = im.decodeImage(_file.readAsBytesSync());
    mealID = Uuid().v4();
    final compressedImageFile = File('$_path/img_$mealID.jpg')
      ..writeAsBytesSync(im.encodeJpg(imageFile, quality: 80));
    setState(() {
      _file = compressedImageFile;
    });

вышеупомянутый метод для сжатия изображения, и для захвата изображения из галереи / камеры, я использую метод ниже.


  Future getImageFromCamera() async {
    Navigator.pop(context);
    var image = await ImagePicker.pickImage(
      source: ImageSource.camera,
      imageQuality: 50,
      /*you can set max height and/or width here as well just by setting value for maxHeight and/or maxWidth argument*/
    );
    setState(() {
      _file = image;
    });
    await compressImage();
  }

  Future getImageFromGallery() async {
    Navigator.pop(context);
    var image = await ImagePicker.pickImage(
      source: ImageSource.gallery,
      imageQuality: 50,
    );
    setState(() {
      _file = image;
    });
    await compressImage();
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...