Как обрезать изображение в Flutter?

допустим, у меня есть прямоугольное, портретное изображение:

enter image description here

Я хотел бы обрезать его, так что он отображается следующим образом:

enter image description here

Как я могу сделать это в Flutter?

(Мне не нужно изменять размер изображения.)

(изображение из https://flic.kr/p/nwXTDb)

4 ответов


Я бы, вероятно, использовал BoxDecoration С DecorationImage. Вы можете использовать alignment и fit свойства, чтобы определить, как обрезается изображение. Вы можете использовать AspectRatio виджет, если вы не хотите жесткий код высоты на Container.

screenshot

import 'package:flutter/material.dart';

void main() {
  runApp(new MaterialApp(
    home: new MyHomePage(),
  ));
}

class MyHomePage extends StatelessWidget {

  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text("Image Crop Example"),
      ),
      body: new Center(
        child: new AspectRatio(
          aspectRatio: 487 / 451,
          child: new Container(
            decoration: new BoxDecoration(
              image: new DecorationImage(
                fit: BoxFit.fitWidth,
                alignment: FractionalOffset.topCenter,
                image: new NetworkImage('https://i.stack.imgur.com/lkd0a.png'),
              )
            ),
          ),
        ),
      ),
    );
  }
}

посмотреть Брендан-Дункан/изображения, это независимая от платформы библиотека для управления изображениями в Dart.

вы можете использовать функцию:

Image copyCrop(Image src, int x, int y, int w, int h);

вы также можете напрямую использовать изображения класс BoxFit и сделать что-то вроде:

new Image.asset(
  stringToImageLocation,
  fit: BoxFit.cover,
)

не совсем то, что задал вопрос, но попал сюда из Google, когда я пытался предложить пользователю интерфейс обрезки.

на image_cropper плагин помог мне.