首页 > 解决方案 > Xamarin 形式:jamesmontemagno/MediaPlugin:在 IOS 应用程序中添加到 UI 时,所选图片正在旋转

问题描述

我跟着这个博客从画廊和相机拍照。但是当涉及到 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)

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

标签: iosxamarin.formsmedia

解决方案


原因:

这是一种常见的体验,即使在Xamarin. 它是由iOS.

UIImage 有一个属性imageOrientation,它指示 UIImageView 和其他 UIImage 消费者旋转原始图像数据。该标志很有可能被保存到上传的 jpeg 图像中的 exif 数据中,但您用来查看它的程序不支持该标志。

解决方案:

在 Github 中的Issues部分jamesmontemagno/MediaPlugin,有几个问题,比如你遇到的问题。似乎使用GetStreamWithImageRotatedForExternalStorage将解决此问题。

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

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

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

iOS 图像方向有奇怪的行为

上传后iOS UIImagePickerController结果图像方向

iOS:图像在保存为 PNG 表示数据后旋转 90 度


推荐阅读