如何解决相机抖动中照片的旋转错误?
问题内容:
我正在使用最新的相机插件版本拍摄照片,并且使用的是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设备上)
问题答案:
您可以使用软件包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);