这是我在我的pcl项目(ios/android)中从图库选择图片的代码:
protected async Task PickImage()
{
try
{
Stream stream = await DependencyService.Get<IPicturePicker>().GetImageStreamAsync();
{
Image image = new Image
{
Source = ImageSource.FromStream(() => stream),
BackgroundColor = Color.Gray
};
byte[] ImageData = Utils.Base64Utils.ToByteArray(stream);
_base64String = Convert.ToBase64String(ImageData);
editar_foto_perfil.Source = ImageSource.FromStream(() => new MemoryStream(Convert.FromBase64String(_base64String)));
user.trocaImage = _base64String;
if (Device.OS == TargetPlatform.iOS)
{
user.cont_datanascimento = editar_date_datanasc.Date.ToString("yyyyMMdd");
if (editar_entry_nome.Text != null)
user.cont_nome = editar_entry_nome.Text;
if (editar_picker_estado.SelectedIndex != -1)
user.cont_estado = editar_picker_estado.Items[editar_picker_estado.SelectedIndex].ToString();
if (editar_picker_cidade.SelectedIndex != -1)
user.cont_cidade = editar_picker_cidade.Items[editar_picker_cidade.SelectedIndex].ToString();
if (editar_entry_senha.Text != null)
user.usua_senha = editar_entry_senha.Text;
if (editar_entry_email.Text != null)
user.usua_login = editar_entry_email.Text;
menu.RecriaEditarIOS(user);
}
}
}
catch (Exception ex)
{
var s = ex.Message;
}
}
有时候我无法将选取的图片发送到服务器。通常情况下,这种情况发生在图片过大时,因此我想将其调整为小图像并发送到服务器。
更新
如我们的朋友在评论中建议的那样,我正在尝试使用Crossmedia插件……然后我改变了我的方法:
protected async Task PickImage()
{
try
{
//Stream stream = await DependencyService.Get<IPicturePicker>().GetImageStreamAsync();
await CrossMedia.Current.Initialize();
if (!CrossMedia.Current.IsPickPhotoSupported)
{
DisplayAlert("Photos Not Supported", ":( Permission not granted to photos.", "OK");
return;
}
else
{
var file = await Plugin.Media.CrossMedia.Current.PickPhotoAsync(new Plugin.Media.Abstractions.PickMediaOptions
{
PhotoSize = Plugin.Media.Abstractions.PhotoSize.Medium,
});
}
}
catch (Exception ex)
{
var s = ex.Message;
}
}
但是,file 始终为null。