我关注了this 博客,从画廊和照相机拍摄照片。但是当涉及到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部分没有问题。
答案 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);
}
}