Flutter 如何给图片加文字水印,需要支持png、gif、webp 等图片格式
2条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
在 Flutter 中,要为图片添加文字水印,可以遵循以下步骤:
-
首先,确保你已安装了
flutter_image_watermark
和image_picker
模块。这两个模块是用于处理图像处理操作的库。dependencies [ 'package:flutter_image_watermark', 'package:image_picker', ];
-
在你的 Flutter 文件(例如,
main.dart
)中导入并初始化ImageWatermark
和ImagePicker
类:import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; class MyWidget extends StatefulWidget { @override _MyWidgetState createState() => _MyWidgetState(); } class _MyWidgetState extends State<MyWidget> { Image watermarkImage = AssetImage('assets/watermark.png'); Image watermarkIcon = AssetImage('assets/watermark_icon.png'); void onImagePicked(_Image picked) async { File imageFile = await picked.path; String imagePath = '${imageFile.path}'; try { Image watermarkedImage = Image.fromBytes(await ImagePicker.getImage(source: ImageSource.gallery)); if (watermarkedImage != null) { setState(() { watermarkImage = watermarkedImage; }); } } catch (e) { print(e); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Watermark Image'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Image.asset(watermarkImage), SizedBox(height: 30), ElevatedButton( onPressed: () { Image watermarkedImage = Image.asset(watermarkIcon); if (watermarkedImage != null) { // Watermark your text here using the `onImagePicked` method. const imageDescription = 'Some text'; // Replace this with the code to insert the text into the watermark image: final watermarkDescription = watermarkDescription.replace('Text', imageDescription); Image watermarkWithDescription = Image watermarkedImage.resize((int) watermarkDescription.length, BoxFit.cover); if (watermarkWithDescription != null) { setState(() { watermarkWithDescription = watermarkWithDescription; }); } } }, child: Text('Add Watermark'), ), ], ), ), ); } }
在这个例子中,我们首先创建了一个名为
imageWatermark
的Image
对象,并将其设置为图片文件的路径。然后,我们在onImagePicked
方法中获取图片的路径,并通过fromBytes
方法从ImagePicker
获取图片内容。如果图片内容不是空指针,我们则将图片转换为水印图片,并且修改水印中的文本(在这里使用了String replacement
函数,将'Text'
替换为当前的图像描述)。接下来,我们将修改后的水印图像保存到一个新变量watermarkWithDescription
中,并将其替换回原始的imageWatermark
对象,从而实现了文字水印的功能。请注意,这只是一个基本示例,实际应用时可能需要根据你的具体需求进行修改和扩展,例如:
- 文字的样式(例如字体大小、颜色、对齐方式等):在
ImageWatermark
的构造函数中添加相应的属性。 - 添加删除水印的逻辑:可以在
onImagePicked
方法中添加删除水印的操作,如在图片内容不存在或已经被其他元素覆盖的情况下自动删除水印。 - 布局调整:调整图片、文字和水印之间的位置关系,使其更符合预期的布局要求。
再次强调,如果你需要在 Flutter 中绘制图形或其他功能,应使用绘制工具和API,而不仅仅是简单地调用
Image
类的方法。例如,如果你想要绘制一个圆角矩形,可以使用Path
或LinearPath
线条类型:import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar(title: Text('My App')), body: Center( child: CircleAvatar( radius: 50.0, backgroundImage: AssetImage('assets/avatar.png'), backgroundColor: Colors.white, ), child: Text('A Real Avatar'), ), ), ); } }
在这个例子中,我们使用了
CircleAvatar
组件和AssetImage
图像资源来绘制一个圆形头像,并在其上显示了一段文本 "A Real Avatar"。在Text
的布局中,我们设置了合适的圆角大小,使用了backgroundColor
属性设置背景色为白色。解决 无用评论 打赏 举报 编辑记录-
悬赏问题
- ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
- ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
- ¥15 CSAPPattacklab
- ¥15 一直显示正在等待HID—ISP
- ¥15 Python turtle 画图
- ¥15 关于大棚监测的pcb板设计
- ¥15 stm32开发clion时遇到的编译问题
- ¥15 lna设计 源简并电感型共源放大器
- ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
- ¥15 Vue3地图和异步函数使用