Flutter中的Image入门讲解

}) : assert(scale != null),
assert(alignment != null),
assert(repeat != null),
assert(matchTextDirection != null),
super(key: key);

其中image类型就是上边提到的ui.Image,这个数据的获取官方推荐通过ImageStream添加listener来获取。

  • color和colorBlendMode

这两个属性可以做出许多的效果。

看一段简单的代码

class _MyHomePageState extends State {
ImageInfo info;//图片信息
List blendModes = BlendMode.values;//所有的混合模式转换为list

@override
void didChangeDependencies() {
super.didChangeDependencies();
Image.asset(“images/yuan.png”)
.image
.resolve(createLocalImageConfiguration(context))
.addListener((ImageInfo image, bool synchronousCall) {
setState(() {
info = image; //刷新状态
});
});
}

@override
Widget build(BuildContext context) {
return Scaffold(
body: GridView.builder(
itemCount: blendModes.length - 1,
padding: EdgeInsets.only(top: 10.0),
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 4,
),
itemBuilder: getItemBuilder,
),
);
}

Widget getItemBuilder(BuildContext context, int index) {
return Column(
children: [
RawImage(
image: info?.image,
color: Colors.red,
width: 40,
height: 40,
colorBlendMode: blendModes[index + 1],
fit: BoxFit.cover,
),
Container(
padding: EdgeInsets.only(top: 10.0),
child: Text(
blendModes[index + 1].toString().split(“.”)[1],
style: TextStyle(
color: Colors.black,
fontSize: 15.0,
),
),
),
],
);
}
}

flutter中的混合模式是枚举类型,和Android中的图片混合模式画笔混合模式基本保持一致。上面的代码描述了所有的混合模式并配有图,除了clear没有在里边(clear模式会清除所有内容)。image是一个简单的图片,带透明通道的绿色的圆,在图中就是dst模式下的样子,背景是一个纯红色,在图中就是src模式下的样子。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • fit属性使用的是Boxfit的枚举值,看一下效果:

  • fill

填充,忽略原有的宽高比,填满为止

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • contain

包含,不改变原有比例让容器包含整个图片,容器多余部分填充背景

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • cover

覆盖,不改变原有比例,让图片充满整个容器,图片多余部分裁剪 ///

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • fitWidth

横向图片填充

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • fitHeight

纵向图片填充

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • none

原始大小居中

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • scaleDown

图片大小小于容器事相当于none,图片大小大于容器时缩小图片大小实现contain

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


centerSlice属性专门用于nine-patch文件。

其他属性暂时不讲。

一般情况下这个控件很少使用,但是他是其他Image控件的实现基础,所以必须要拎出来讲一下。

Image

这是一个通用包装类,它包装了RawImage,同时提供了一些简便的Named constructors来使用AssetsImage,ExactAssetImage等ImageProvider的子类。

  • Image, 从ImageProvider来获取图片显示

这个类的使用基本和RawImage一致,在使用的时候只是将参数ui.Image包装为了ImageProvider,不用再自己监听ImageStream。典型简单用法:

Widget image = Image(AssetImage(“images/yuan.png”))

  • Image.asset, 从Asset资源中获取图片显示

这个方法是ImageProviderAssetImage的简单用法:

Widget image = Image.asset(“images/yuan.png”)

  • Image.network, 从URL获取网络图片显示

这个方法是ImageProviderNetworkImage的简单用法:

Widget image = Image.network(“http://img.rangaofei.cn/01b18.jpg”)

  • Image.file, 从文件中获取图片显示

这个方法是ImageProviderFileImage的简单用法:

Widget image = Image.file(file)

  • Image.memory 从内存中获取图片显示.

这个方法是ImageProviderMemoryImage的简单用法:

Widget image = Image.memory(byteList)

CircleAvatar

主要用来显示用户的头像,任何图片都会被剪切为圆形。

一个简单用法:

CircleAvatar(
child: Text(“头像”),
backgroundImage: AssetImage(“images/yuan.png”),
backgroundColor: Colors.red,
radius: 50.0,
),

生成的图像如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

CircleAvatar内置了许多的功能。radius用来控制图片的大小,同时它可以自动感知当前theme是白天模式还是夜间模式来切换图片颜色,另外它实际是包装了AnimatedContainer,设置的动画时间是200ms。在改变它的一些相关属性时会自动使用动画来执行。看一个简单的动图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

代码如下:

class _MyHomePageState extends State {
double radius = 10.0;

@override
void initState() {
super.initState();
Future.delayed(Duration(milliseconds: 2 * 1000), () {
setState(() {
radius = 20.0;
});
return Duration(milliseconds: 210);
}).then((Duration d) {
Future.delayed(d, () {
setState(() {
radius = 40.0;
});
return Duration(milliseconds: 210);
}).then((Duration d) {
Future.delayed(d, () {
setState(() {
radius = 30.0;
});
});
});
;
});
}

@override
Widget build(BuildContext context) {

return Scaffold(
body: Center(
child: CircleAvatar(
child: Text(“头像”),
backgroundImage: AssetImage(“images/yuan.png”),
radius: radius,
),
),
);
}
}

这里我并没有使用AnimationController来控制radius值的变化,而是通过一个Future延时来控制。初始化的时候radius是10.0,延迟两秒后变为20.0,因为CircleAvatar默认的过度时间是200ms,为了有一个平滑的过渡效果,我把下一次改变时间设置为了210ms,这时半径是40.0,最后经过210ms后半径设置为30.0,整个变化过程为:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

新的开始

改变人生,没有什么捷径可言,这条路需要自己亲自去走一走,只有深入思考,不断反思总结,保持学习的热情,一步一步构建自己完整的知识体系,才是最终的制胜之道,也是程序员应该承担的使命。

《系列学习视频》

《系列学习文档》

《我的大厂面试之旅》

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

《系列学习视频》*
[外链图片转存中…(img-sUODb3Bz-1712756948196)]

《系列学习文档》

[外链图片转存中…(img-G6hK9GAx-1712756948196)]

《我的大厂面试之旅》

[外链图片转存中…(img-pPo8H9UU-1712756948196)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 25
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
flutter_image_editor是一个用于在Flutter应用程序编辑图像的库。它提供了一组功能强大的图像编辑工具,可以使用它们来裁剪、旋转、调整尺寸和应用滤镜等操作。 首先,在使用flutter_image_editor之前,我们需要将其添加为项目的依赖项。我们可以在pubspec.yaml文件添加以下行: ``` dependencies: flutter_image_editor: ^版本号 ``` 然后运行`flutter packages get`来获取库。 一旦我们添加了flutter_image_editor库,我们就可以开始使用它了。首先,我们需要导入库: ```dart import 'package:flutter_image_editor/flutter_image_editor.dart'; ``` 然后,我们可以使用ImageEditor类的实例来编辑图像。以下是使用flutter_image_editor的一些常见功能: 1. 裁剪图像: ```dart final result = await ImageEditor.cropImage( file.path, startX: 0, startY: 0, width: 200, height: 200, ); ``` 2. 旋转图像: ```dart final result = await ImageEditor.rotateImage( 90, // 旋转角度 file.path, ); ``` 3. 调整图像尺寸: ```dart final result = await ImageEditor.resizeImage( 500, // 新的宽度 500, // 新的高度 file.path, ); ``` 4. 应用滤镜: ```dart final result = await ImageEditor.applyFilter( ImageFilter.sepia, // 滤镜类型 file.path, ); ``` 这些只是flutter_image_editor支持的一些功能示例。根据您的需求,您还可以使用其他功能来编辑和处理图像。 最后,根据每种编辑操作的返回类型,您可以在Flutter应用程序根据需要使用编辑后的图像结果。例如,您可以将它们显示在Image widget,保存到设备上的文件,或将其上传到服务器等等。 总结而言,flutter_image_editor是一个非常方便和强大的图像编辑库,它可以帮助我们在Flutter应用程序轻松地实现各种图像编辑操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值