Flutter图片模糊处理插件image_blur的使用
Flutter图片模糊处理插件 image_blur
的使用
image_blur
是一个用于在Flutter应用中为图片添加模糊效果的插件。该插件支持圆形和矩形形状的模糊效果,并且可以与本地和在线图片一起使用。
初始化缓存配置
在使用 image_blur
插件之前,需要先初始化缓存配置:
void main() async {
await ImageBlur.init();
runApp(const MyApp());
}
主要功能
以下是插件的主要功能示例:
矩形模糊预览
ImageBlur.imageHashPreview(
imagePath: imageUrls[index],
width: size.width,
height: size.height,
);
简单模糊效果
ImageBlur(
imageUrl: listimage[index],
);
圆形模糊预览
ImageBlur.imageHashPreviewCircular(
size: 340,
imagePath: "https://example.com/image.jpg",
)
圆形模糊效果
ImageBlur.imageCircularBlur(
size: 340,
imageNetwork: "https://example.com/image.jpg",
),
获取调色板颜色
ImageBlur.imageBlurGetPalletteColor(
imageUrl: listimage[index],
)
开始使用
首先,在 pubspec.yaml
文件中添加依赖:
dependencies:
image_blur: ^1.0.82
然后,在 Dart 文件中导入包:
import 'package:image_blur/image_blur.dart';
完整示例代码
以下是一个完整的示例代码,展示了如何在 Flutter 应用中使用 image_blur
插件:
import 'package:flutter/material.dart';
import 'package:image_blur/image_blur.dart';
void main() async {
await ImageBlur.init(removeCacheTime: 10);
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Demo App',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(
seedColor: const Color.fromRGBO(55, 151, 239, 1),
primary: const Color.fromRGBO(55, 151, 239, 1),
),
useMaterial3: true,
),
home: const Search(),
);
}
}
class Search extends StatelessWidget {
const Search({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
Size size = MediaQuery.of(context).size;
List<String> imageUrls = [
"https://img.freepik.com/free-photo/pier-lake-hallstatt-austria_181624-44201.jpg",
// 添加更多图片URL
];
return SafeArea(
child: Scaffold(
body: SizedBox(
width: size.width,
height: size.height,
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
SizedBox(
width: size.width * 0.95,
child: SearchBar(
hintText: 'Search',
shape: MaterialStatePropertyAll(BeveledRectangleBorder(
borderRadius: BorderRadius.circular(5.0))),
hintStyle: const MaterialStatePropertyAll(
TextStyle(color: Colors.grey)),
elevation: MaterialStateProperty.all(1.0),
leading: const Padding(
padding: EdgeInsets.only(left: 10.0),
child: Icon(
Icons.search,
color: Colors.grey,
),
),
),
),
],
),
Expanded(
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 5.0, horizontal: 5.0),
child: GridView.builder(
physics: const BouncingScrollPhysics(),
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisSpacing: 5.0,
mainAxisSpacing: 5.0,
crossAxisCount: 3,
),
itemBuilder: (context, index) {
return ClipRRect(
borderRadius: BorderRadius.circular(12.0),
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(12.0),
),
child: ImageBlur(
imageUrls: imageUrls[index],
width: size.width,
height: size.height,
),
),
);
},
),
),
),
],
),
),
),
);
}
}
额外信息
如果您有任何问题、疑问或建议,请随时通过邮件联系我们:swan.dev1993@gmail.com。我们欢迎您的反馈,并将尽力解决任何问题或提供帮助。
有关此插件的更多信息,您可以访问我们的 GitHub 仓库,在那里您可以找到额外的资源、参与插件的开发并提交问题或错误报告。感谢您的贡献和反馈,我们将努力使这个插件对用户尽可能有用。
感谢您使用我们的插件,期待您的反馈!
更多关于Flutter图片模糊处理插件image_blur的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter图片模糊处理插件image_blur的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用image_blur
插件来进行图片模糊处理的示例代码。
首先,你需要在pubspec.yaml
文件中添加image_blur
依赖:
dependencies:
flutter:
sdk: flutter
image_blur: ^0.4.0 # 请确保使用最新版本
然后运行flutter pub get
来安装依赖。
接下来,你可以在Dart代码中使用这个插件。以下是一个简单的示例,展示如何加载一张图片并对其应用模糊效果:
import 'package:flutter/material.dart';
import 'package:image_blur/image_blur.dart';
import 'dart:ui' as ui;
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Image Blur Example'),
),
body: Center(
child: ImageBlurDemo(),
),
),
);
}
}
class ImageBlurDemo extends StatefulWidget {
@override
_ImageBlurDemoState createState() => _ImageBlurDemoState();
}
class _ImageBlurDemoState extends State<ImageBlurDemo> {
ui.Image? _image;
ui.Image? _blurredImage;
@override
void initState() {
super.initState();
_loadImage();
}
Future<void> _loadImage() async {
final ByteData data = await rootBundle.load('assets/sample_image.jpg');
final Uint8List bytes = data.buffer.asUint8List();
_image = await decodeImageFromList(bytes);
if (_image != null) {
setState(() {
_blurredImage = _applyBlurEffect(_image!);
});
}
}
ui.Image? _applyBlurEffect(ui.Image image) {
final int width = image.width;
final int height = image.height;
final ByteData pixels = image.toByteData(format: ui.ImageByteFormat.rawRgba);
final Uint8List rawPixels = pixels.buffer.asUint8List();
final RenderRepaintBoundary boundary = RenderRepaintBoundary();
final ui.Image blurredImage = await ImageBlur.blur(
rawPixels,
width,
height,
sigmaX: 10.0,
sigmaY: 10.0,
);
return blurredImage;
}
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
if (_image != null)
Image.memory(
_image!.toByteData(format: ui.ImageByteFormat.png)!.buffer.asUint8List(),
width: 300,
height: 300,
fit: BoxFit.cover,
gaplessPlayback: true,
),
if (_blurredImage != null)
SizedBox(height: 20),
if (_blurredImage != null)
Image.memory(
_blurredImage!.toByteData(format: ui.ImageByteFormat.png)!.buffer.asUint8List(),
width: 300,
height: 300,
fit: BoxFit.cover,
gaplessPlayback: true,
),
],
);
}
}
在这个示例中,我们做了以下几件事:
- 从
assets
文件夹中加载了一张图片(请确保你已经将图片添加到assets
文件夹,并在pubspec.yaml
中正确配置)。 - 使用
decodeImageFromList
函数将图片数据解码为ui.Image
对象。 - 使用
ImageBlur.blur
函数对图片应用模糊效果。 - 使用
Image.memory
将处理后的图片数据渲染到屏幕上。
请注意,ImageBlur.blur
函数是异步的,因此我们在_loadImage
函数中使用await
等待其完成。另外,sigmaX
和sigmaY
参数控制模糊的程度,你可以根据需要调整这些值。
确保你的图片资源路径和名称与代码中使用的相匹配。如果图片资源位于其他位置,请相应地调整代码。