Flutter Camera插件拍照自动旋转90度,如何强制修正旋转?
Flutter Camera插件图片旋转处理方案
一、拍摄后手动调整图片旋转角度
可以借助image包实现图片旋转,步骤如下:
- 在
pubspec.yaml中添加依赖:
dependencies: image: ^4.0.17 # 建议使用最新版本
- 拍摄完成后读取图片并执行旋转:
import 'package:image/image.dart' as img; import 'dart:io'; // 假设拍摄得到的图片路径为imagePath final imageFile = File(imagePath); final imageBytes = await imageFile.readAsBytes(); final originalImage = img.decodeImage(imageBytes); // 根据需求旋转角度(示例为90度) final rotatedImage = img.copyRotate(originalImage!, 90); // 保存旋转后的图片 final rotatedBytes = img.encodeJpg(rotatedImage); await File('${imageFile.parent.path}/rotated_image.jpg').writeAsBytes(rotatedBytes);
二、读取EXIF元数据自动适配角度
拍摄的图片会携带EXIF方向信息,可通过exif包读取并自动计算旋转角度:
- 添加依赖到
pubspec.yaml:
dependencies: exif: ^3.1.0 # 建议使用最新版本
- 读取EXIF信息并确定旋转角度:
import 'package:exif/exif.dart'; import 'dart:io'; final imageFile = File(imagePath); final exifData = await readExifFromBytes(await imageFile.readAsBytes()); final orientationTag = exifData['Orientation']; int rotateAngle = 0; // 根据EXIF Orientation标签映射旋转角度 if (orientationTag != null) { switch (orientationTag.values[0]) { case 3: rotateAngle = 180; break; case 6: rotateAngle = 90; break; case 8: rotateAngle = 270; break; default: rotateAngle = 0; } } // 后续使用image包执行旋转(参考第一部分代码)
三、关于插件内置旋转配置
目前Flutter camera插件没有提供拍摄时直接设置旋转的配置项。针对平板设备的角度问题,可尝试监听设备方向变化,动态调整相机预览方向:
// 监听设备方向并调整相机偏好方向 WidgetsBinding.instance.addObserver( OrientationObserver( didChangeOrientation: (orientation) { _controller.setPreferredOrientation(orientation); }, ), );
注意:不同平板机型的传感器与相机方向匹配逻辑可能有差异,需针对性测试验证。
内容的提问来源于stack exchange,提问作者realtebo
相关产品推荐
相关产品推荐

