假设我在pubspec.yaml中声明了自己的图像,如下所示:
assets:
- assets/kitten.jpg我的颤音代码是:
void main() {
runApp(
new Center(
child: new Image.asset('assets/kitten.jpg'),
),
);
}现在我有了一个new Image.asset(),如何确定该图像的宽度和高度?例如,我只想打印出图像的宽度和高度。
(看起来dart:ui的图像类有宽度和高度,但不确定如何从小部件的图像转到dart:ui的图像。)
谢谢!
发布于 2017-06-21 18:32:39
更新的解决方案:
随着新版本的颤振,旧的解决方案是过时的。现在addListener需要一个ImageStreamListener。
Widget build(BuildContext context) {
Image image = new Image.network('https://i.stack.imgur.com/lkd0a.png');
Completer<ui.Image> completer = new Completer<ui.Image>();
image.image
.resolve(new ImageConfiguration())
.addListener(ImageStreamListener((ImageInfo info, bool _) {
completer.complete(info.image));
})
...
...原文:
如果您已经有了一个Image小部件,您可以通过在其ImageStream的ImageProvider上调用resolve来读取它的resolve。

import 'dart:ui' as ui;
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
void main() {
runApp(new MaterialApp(
home: new MyHomePage(),
));
}
class MyHomePage extends StatelessWidget {
Widget build(BuildContext context) {
Image image = new Image.network('https://i.stack.imgur.com/lkd0a.png');
Completer<ui.Image> completer = new Completer<ui.Image>();
image.image
.resolve(new ImageConfiguration())
.addListener((ImageInfo info, bool _) => completer.complete(info.image));
return new Scaffold(
appBar: new AppBar(
title: new Text("Image Dimensions Example"),
),
body: new ListView(
children: [
new FutureBuilder<ui.Image>(
future: completer.future,
builder: (BuildContext context, AsyncSnapshot<ui.Image> snapshot) {
if (snapshot.hasData) {
return new Text(
'${snapshot.data.width}x${snapshot.data.height}',
style: Theme.of(context).textTheme.display3,
);
} else {
return new Text('Loading...');
}
},
),
image,
],
),
);
}
}发布于 2019-03-30 06:23:08
如果您只想要异步函数中的图像的宽度和高度,则其他答案似乎过于复杂。您可以像这样直接使用颤振库获得图像分辨率:
import 'dart:io';
File image = new File('image.png'); // Or any other way to get a File instance.
var decodedImage = await decodeImageFromList(image.readAsBytesSync());
print(decodedImage.width);
print(decodedImage.height);发布于 2019-08-24 17:31:21
创建一个方法,例如:
Future<Size> _calculateImageDimension() {
Completer<Size> completer = Completer();
Image image = Image.network("https://i.stack.imgur.com/lkd0a.png");
image.image.resolve(ImageConfiguration()).addListener(
ImageStreamListener(
(ImageInfo image, bool synchronousCall) {
var myImage = image.image;
Size size = Size(myImage.width.toDouble(), myImage.height.toDouble());
completer.complete(size);
},
),
);
return completer.future;
}并把它当作:
_calculateImageDimension().then((size) => print("size = ${size}")); // 487.0,696.0https://stackoverflow.com/questions/44665955
复制相似问题