我正在使用最新的相机插件版本拍摄照片,并且使用的是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岁的小米手机上,它可以完美工作,但是在某些新的三星手机上,照片始终在旋转。
Image.file(File(_imagePath))
如何确保旋转始终正确?(即使在ios设备上)
您可以使用软件包https://pub.dev/packages/flutter_exif_rotation 支持,iOS并且Android 在某些设备中,exif数据实际上是纵向时会以横向模式显示图片。 该插件可修复使用这些设备拍摄的照片的方向。
iOS
Android
对于Android, 将此添加到您的AndroidManifest.xml
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);