Xamarin表单:jamesmontemagno/MediaPlugin:所选图片在添加到IOS应用程序的UI时正在旋转

Xamarin表单:jamesmontemagno/MediaPlugin:所选图片在添加到IOS应用程序的UI时正在旋转,ios,xamarin.forms,media,Ios,Xamarin.forms,Media,我跟随博客从画廊和照相机中拍照。但在IOS的UI中,选定的图片以右旋转的形式显示问题只在使用相机时出现,我对多媒体资料没有任何问题。此功能在android和UWP中运行良好 下面添加的屏幕截图: 摄像机编码: async void CameraClick() { try { await CrossMedia.Current.Initialize(); if (!Cro

我跟随博客从画廊和照相机中拍照。但在IOS的UI中,选定的图片以右旋转的形式显示问题只在使用相机时出现,我对多媒体资料没有任何问题。此功能在android和UWP中运行良好

下面添加的屏幕截图:

摄像机编码:

async void CameraClick()
        {
            try
            {
                await CrossMedia.Current.Initialize();
                if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)
                {
                    await DisplayAlert("Camera", "No camera available.", "OK");
                    return;
                }
                _mediaFile = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions
                {
                    Directory = "Sample",
                    Name = "test.jpg",
                    AllowCropping = true
                });
                if (_mediaFile == null)
                    return;
                profileImage.Source = ImageSource.FromStream(() =>
                {
                    isPicture = true;
                    return _mediaFile.GetStream();
                });
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine("Exception:>" + ex);
            }
        }
设备:IOS SE

媒体插件版本:3.1.1

我用于显示图像的控件:Xam.plugins.Forms.Imagecircle 2.0.2(对于android和UWP,我使用的是1.8.1)


Gallery pictures工作正常,问题仅在使用相机拍照时出现。android和UWP部分没有问题。

原因:

即使在
Xamarin
之外,这也是一种常见的体验。它是由
iOS
引起的

UIImage有一个属性
imageOrientation
,用于指示 UIImageView和其他UIImage使用者旋转原始图像数据。 此标志很有可能保存到exif数据中 在上载的jpeg图像中,但用于查看该图像的程序不可用 纪念那面旗帜

解决方案:

在Github中的
jamesmontemagno/MediaPlugin
部分的
问题中,有几个问题与您遇到的问题类似。似乎使用
GetStreamWithImageRotatedForExternalStorage
可以解决此问题

你可以参考:

另一种方式是,您可以自己旋转图像

以下是一些可能对您有所帮助的链接:


在过去的几个月里,我在iOS上遇到了这个问题。 解决方法是在代码中再添加一行,即:-
SaveMetaData=false,

async void CameraClick()
        {
            try
            {
                await CrossMedia.Current.Initialize();
                if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)
                {
                    await DisplayAlert("Camera", "No camera available.", "OK");
                    return;
                }
                _mediaFile = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions
                {
                    Directory = "Sample",
                    Name = "test.jpg",
                    AllowCropping = true,
                    SaveMetaData = false
                });
                if (_mediaFile == null)
                    return;
                profileImage.Source = ImageSource.FromStream(() =>
                {
                    isPicture = true;
                    return _mediaFile.GetStream();
                });
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine("Exception:>" + ex);
            }
        }

您可能需要更新您的问题、正在使用的特定设备、媒体插件的版本以及用于显示图像的控件。图像可能包含图像控件不遵守的嵌入旋转元数据。@BenReierson用请求的详细信息更新了问题。我在使用相同插件的应用程序中没有看到此问题,但您可以尝试使用ffcachedimage()查看是否正确显示。它有一个圆图像变换,如果需要,可以用来复制ImageCircle控件。@Benreerson我使用的是Visual Studio提供的模拟器,相机在该模拟器上不工作。有没有其他方法来测试模拟器中的摄像头功能?我也看到了同样的问题,我总是使用真实的设备来拍摄照片。