Xamarin形式:jamesmontemagno / MediaPlugin:在IOS应用程序中添加到UI时所选图片正在旋转

时间:2018-11-24 11:05:17

标签: ios xamarin.forms media

我关注了this 博客,从画廊和照相机拍摄照片。但是当涉及到IOS中的UI时,所选图片以右旋形式显示。 仅在使用相机时出现问题,画廊没有问题。此功能在android和UWP中正常工作。

下面添加了屏幕截图:

enter image description here

相机代码:

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)

画廊的图片工作正常,问题仅在于使用相机拍摄时。 android和UWP部分没有问题。

2 个答案:

答案 0 :(得分:1)

原因:

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

  

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

解决方案:

在Github的Issues的{​​{1}}部分中,有许多问题,例如您遇到的问题。似乎使用jamesmontemagno/MediaPlugin将解决此问题。

您可以参考: https://github.com/jamesmontemagno/MediaPlugin/issues/333

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

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

iOS Image Orientation has Strange Behavior

iOS UIImagePickerController result image orientation after upload

iOS: Image get rotated 90 degree after saved as PNG representation data

答案 1 :(得分:0)

最近几个月,我在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);
            }
        }