参考
不能用Future,用的是completer回调,一般如果你的异步操作是带回调的不能即时返回结果的类型,你需要用到 Completer

image.image.resolve(ImageConfiguration()).addListener(ImageStreamListener((ImageInfo image, bool _) {completer.complete(image.image);//这里回调数据,所以要用Completer}));
假设我在pubspec.yaml中声明了我的图像:assets:- assets/kitten.jpg
我的Flutter代码是这样的:void main() {runApp(new Center(child: new Image.asset('assets/kitten.jpg'),),);
}
现在我有一个new Image.asset(),如何确定该图像的宽度和高度?例如,我只想打印出图像的宽度和高度。(看起来dart:ui's Image class有宽度和高度,但不知道如何从小部件的图像转到dart:ui的图像。)谢谢!7 个答案:
答案 0 :(得分:15)如果您已有Image窗口小部件,则可以通过ImageStream上的resolve来阅读ImageProvider。screenshotimport '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,],),);}
}
答案 1 :(得分:13)您可以resolve ImageProvider获得ImageStream,然后在图片准备就绪时使用addListener通知。screenshotimport '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 {Future<ui.Image> _getImage() {Completer<ui.Image> completer = new Completer<ui.Image>();new NetworkImage('https://i.stack.imgur.com/lkd0a.png').resolve(new ImageConfiguration()).addListener((ImageInfo info, bool _) => completer.complete(info.image));return completer.future;}Widget build(BuildContext context) {return new Scaffold(appBar: new AppBar(title: new Text("Image Dimensions Example"),),body: new Center(child: new FutureBuilder<ui.Image>(future: _getImage(),builder: (BuildContext context, AsyncSnapshot<ui.Image> snapshot) {if (snapshot.hasData) {ui.Image image = snapshot.data;return new Text('${image.width}x${image.height}',style: Theme.of(context).textTheme.display4);} else {return new Text('Loading...');}},),),);}
}
答案 2 :(得分:8)如果您只想在异步函数中调整图像的宽度和高度,则其他答案似乎过于复杂。您可以直接使用flutter lib获得图像分辨率,如下所示: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);
答案 3 :(得分:3)创建一个方法,例如:1) www.mysite.com/basics-of-physics
2) www.mysite.com/what-is-newtons-first-law-in-physics
3) www.mysite.com/basics-of-chemistry
4) www.mysite.com/basics-of-biology
并像这样使用它:$route['(:any)'] = "Physics/index/$1";
$route['(:any)'] = "Chemistry/index/$1";
$route['(:any)'] = "Biology/index/$1";
答案 4 :(得分:3)如何检查从资产加载的图像尺寸的简单方法。var img = await rootBundle.load("Your image path");
var decodedImage = await decodeImageFromList(img.buffer.asUint8List());
int imgWidth = decodedImage.width;
int imgHeight = decodedImage.height;
答案 5 :(得分:0)使用新版本的flutter,旧解决方案无效:image.image.resolve(new ImageConfiguration()).addListener((ImageInfo info, bool _) => completer.complete(info.image));
低于工作版本:_image.image.resolve(new ImageConfiguration()).addListener(new ImageStreamListener((ImageInfo image, bool _) {completer.complete(image.image);
}));
答案 6 :(得分:0)如果您不想再使用FutureBuilder,也可以像这样使用await:不要忘记导入图像。但是由于有两个Image类,因此需要将其导入并与ui.Image一起使用import 'dart:ui' as ui
然后,您可以按以下方式获取图像的尺寸。final Image image = Image(image: AssetImage('assets/images/someimage.png'));Completer<ui.Image> completer = new Completer<ui.Image>();image.image.resolve(new ImageConfiguration()).addListener(new ImageStreamListener((ImageInfo image, bool _) {completer.complete(image.image);}));ui.Image info = await completer.future;int width = info.width;int height = info.height;

我自己的就可以写:

  Future<int> getH(String path) async {// final Image image = Image(image: AssetImage('assets/images/someimage.png'));Image image = Image.file(File.fromUri(Uri.parse(path)));Completer<ui.Image> completer = Completer<ui.Image>();image.image.resolve(ImageConfiguration()).addListener(ImageStreamListener((ImageInfo image, bool _) {completer.complete(image.image);}));ui.Image info = await completer.future;int width = info.width;int height = info.height;print('获取高度和宽度${width} ${height}');return width;}

调用

ImageUtile().getH(file.path).then((value) => print('图片的宽度是${value}'));
  Future<int> _getImage(String netImage) async {int? height;Completer<ui.Image> completer = Completer<ui.Image>();try {Image image = Image.network(netImage);image.image.resolve(const ImageConfiguration()).addListener(ImageStreamListener((ImageInfo info, bool _) {if (completer.isCompleted) {} else {completer.complete(info.image);}}));} catch (e) {print('图片显示错误${e}');}ui.Image info = await completer.future;height = info.height;print('该图片的高度是多少${netImage}    高度是${height}');return height;}FutureBuilder(future: _getImage(item?.photo?.photo_thumb ?? ''),builder: (BuildContext context,AsyncSnapshot<dynamic>? snapshot) {print('异步获取图片的高度${snapshot?.data}');return BackgroundWall(height: snapshot?.data != null? null: Global.screenWidth / 2 - 15,width: Global.screenWidth,hasPlaceholder: true,radius: 4.r,avatarUrl: item?.photo?.photo_thumb ?? '',fit: BoxFit.cover,);},)

flutter 确定图片的宽度和高度,用的是completer回调相关推荐

  1. java读取服务器图片大小,SpringMVC中MultipartFile上传获取图片的宽度和高度详解

    SpringMVC一般使用MultipartFile来做文件的上传,通过MultipartFile的getContentType()方法判定文件的类型(MIME) ".doc":& ...

  2. 私人笔记 -- 将图片插入到指定的单元格位置,并设置图片的宽度和高度

    /// <summary> /// 将图片插入到指定的单元格位置,并设置图片的宽度和高度. /// 注意:图片必须是绝对物理路径 /// </summary> /// < ...

  3. html图片的宽度和高度设置,CSS设置img图片的宽度和高度

    如何使用CSS控制HTML中图片高度宽度,统一对象内图片高度宽度等样式属性? 我们在布局图片列表时,通常我们要控制img图片的高度和宽度这样来达到图片统一. 如以下这个的图片列表布局示图 图片img高 ...

  4. 背景图片根据宽度自适应高度的方案

    移动前端自适应开发过程中,使用背景图片替换img标签时,img标签可以根据屏幕宽度自适应高度,而背景图片却无法适应高度,使用css的内边距(padding)可以解决高度问题,因为垂直方向的paddin ...

  5. 图片加尺寸php代码,php获取图片尺寸(宽度,高度)_php

    本篇文章主要说明php获取图片尺寸(宽度,高度)的函数,即getimagesize()函数. 语法:array getimagesize( string filename [, array & ...

  6. php 获得图片大小,php获取图片尺寸(宽度,高度)

    本篇文章主要说明PHP获取图片尺寸(宽度,高度)的函数,即getimagesize()函数. 语法:array getimagesize( string filename [, array & ...

  7. CRC爆破png图片宽度和高度原理以及python代码

    CRC爆破png图片宽度和高度原理以及python代码 文章目录 CRC爆破png图片宽度和高度原理以及python代码 1.PNG图片的格式 2.CRC 3.Python爆破图片宽度和高度 参考文章 ...

  8. 设定网页最小最大宽度和高度(兼容IE6)

    http://www.cnblogs.com/double-bin/archive/2011/12/19/2293093.html /* 最小寬度 */ .min_width{min-width:30 ...

  9. 批量将所有图片的宽度和高度调整为固定的像素数值

    概要:我们有时候需要批量将所有图片的宽度和高度调整为固定的像素值,比如说我们需要将所有图片的宽度和高度都调整为相同的数值,怎么办呢?这里给大家讲一下如何批量调整所有图片的宽度和高度为统一的像素值. 我 ...

最新文章

  1. 新电脑装不了win7?来试试我的方法!
  2. 有没有简单优雅的方法来定义单例? [重复]
  3. linux怎么运行ing,Linux命令笔记ing
  4. boost::hana::tag_of_t用法的测试程序
  5. 小问题: windows组件调用失败,无法加载安装安装程序:Wbemupgd.dll
  6. Promise之异步调用
  7. error: stray '\343' in program 问题解决
  8. HTML DOM文档对象查找元素的方法
  9. 【数据库实验】《小型MIS的开发》— JavaFx 开发 民航票务管理系统
  10. Windows 10 安装SVN 不显示状态图标--解决方法
  11. 如何制作录屏gif动态图
  12. 周立功USBCAN资料分享
  13. 武汉离互联网第一梯队还有多远?
  14. 太原市住房公积金商转公又新增一种担保方式
  15. add_days oracle_oracle 日期时间函数使用总结
  16. 安装navicat missing required library xxx.dll(libcc.dll libdd.dll)亲测有效
  17. ITE 在vs下可以模拟,在ite下无法编译
  18. 美国的网络空间安全国家战略
  19. python数据科学实践 常象宇_python数据科学
  20. 深入分析Redis Server went away产生的原因

热门文章

  1. 中国红客再度出击,台湾网络大面积瘫痪,红客是一群怎样的组织?
  2. 配置idea自带的tomcat_Tomcat下载安装并部署到IDEA的教程(附带idea两种热部署设置方法)...
  3. 使用pt-osc改表(修改字符集)丢数据
  4. 组合数据类型、可变序列与不可变序列、数据组织维度
  5. 数据管理,数据治理,数据管控
  6. 关于空调安装时外机支架另收费
  7. linux用户注销的方法,linux退出登录_Linux下注销登录用户的方法
  8. 李翔C4D案例教程笔记(未完)
  9. python编程输入名字配对情侣网名_名字配对测试两人关系,亲测有点准。
  10. Maxdos 9.3不能引导系统进入Maxdos