一尘不染

如何解决相机抖动中照片的旋转错误?

flutter

我正在使用最新的相机插件版本拍摄照片,并且使用的是flutter示例中的代码。这是我选择相机的方式:

final cameras = await availableCameras();
final firstCamera = cameras.first;

这是init内部:

_cameraController = CameraController(
  widget.camera,
  ResolutionPreset.medium,
  enableAudio: false,
);

这是相关代码的其余部分:

Future _takePhoto(BuildContext context) async {
  try {
    await _initializeControllerFuture;
    final path = join(
      (await getTemporaryDirectory()).path,
      '${DateTime.now()}.png',
    );

    await _cameraController.takePicture(path);

    setState(() {
      _imagePath = path;
    });
  } catch (e) {
    print(e);
  }
}

之后,我将照片显示给用户,Image.file(File(_imagePath))然后将照片发送给API。问题是照片有时会以错误的方向拍摄。(我对此很确定,因为照片也在数据库中旋转。)例如,在3岁的小米手机上,它可以完美工作,但是在某些新的三星手机上,照片始终在旋转。

如何确保旋转始终正确?(即使在ios设备上)


阅读 273

收藏
2020-08-13

共1个答案

一尘不染

您可以使用软件包https://pub.dev/packages/flutter_exif_rotation
支持,iOS并且Android
在某些设备中,exif数据实际上是纵向时会以横向模式显示图片。
该插件可修复使用这些设备拍摄的照片的方向。

对于Android,
将此添加到您的AndroidManifest.xml

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

程式码片段

image = await FlutterExifRotation.rotateImage(path: image.path);

//Note : iOS not implemented
image = await FlutterExifRotation.rotateAndSaveImage(path: image.path);
2020-08-13