You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Camera插件拍照自动旋转90度,如何强制修正旋转?

Flutter Camera插件图片旋转处理方案

一、拍摄后手动调整图片旋转角度

可以借助image包实现图片旋转,步骤如下:

  1. 在pubspec.yaml中添加依赖:
dependencies:
  image: ^4.0.17 # 建议使用最新版本
  1. 拍摄完成后读取图片并执行旋转:
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包读取并自动计算旋转角度:

  1. 添加依赖到pubspec.yaml:
dependencies:
  exif: ^3.1.0 # 建议使用最新版本
  1. 读取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 08:49:59