【问题标题】:Convert a image to a base 64 string xamarin将图像转换为 base 64 字符串 xamarin
【发布时间】:2020-05-07 11:28:23
【问题描述】:

我在这里遵循了这个指南https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/dependency-service/photo-picker

async void OnPickPhotoButtonClicked(object sender,EventArgs e)
{
            (sender as Image).IsEnabled = false;

            Stream stream = await DependencyService.Get<IPhotoPickerService>().GetImageStreamAsync();
            if(stream != null)
            {
                temp_photo.Source = ImageSource.FromStream(() => stream);
            }

            (sender as Image).IsEnabled = true;
}

当我使用它选择图像时,它将在

中显示图库中的图像

我需要做的是将图像转换为base64_string,以便可以将其发送到我们的服务器

我尝试按照此链接https://forums.xamarin.com/discussion/81344/how-to-convert-image-from-plugin-media-to-base64接受的答案进行操作

var stream = file.GetStream();
var bytes = new byte [stream.Length];
await stream.ReadAsync(bytes, 0, (int)stream.Length);
string base64 = System.Convert.ToBase64String(bytes);

采用我的方法看起来像这样

async void OnPickPhotoButtonClicked(object sender,EventArgs e)
        {
            (sender as Image).IsEnabled = false;

            Stream stream = await DependencyService.Get<IPhotoPickerService>().GetImageStreamAsync();
            if(stream != null)
            {
                temp_photo.Source = ImageSource.FromStream(() => stream);

                var bytes = new byte[stream.Length];
                await stream.ReadAsync(bytes, 0, (int)stream.Length);
                string base64 = System.Convert.ToBase64String(bytes);
            }

            (sender as Image).IsEnabled = true;
        }

但是在选择图像时,这会导致应用程序崩溃

如何将选中的图片转换成base64字符串?

作为参考,我正在安卓设备上进行测试

编辑:将我的方法包装在 try 块中以捕获异常,这就是它所说的

不支持指定的方法。

【问题讨论】:

  • 对于任何崩溃,您需要做的第一件事是识别导致它的异常。在您这样做之前,我们无法帮助您。但是,我会注意到 XF 有一个媒体插件,它消除了使用 DependencyService 方法的需要
  • @Jason 更新帖子但有异常
  • 是哪一行造成的?
  • 现在可以用了吗?

标签: c# xamarin.forms


【解决方案1】:

请尝试将 Steam 复制到新的MemoryStream,如下所示:

async void OnPickPhotoButtonClicked(object sender, EventArgs e)
    {

        Stream stream = await DependencyService.Get<IPhotoPickerService>().GetImageStreamAsync();
        if (stream != null)
        {
            using (MemoryStream memory = new MemoryStream())
            {
                stream.CopyTo(memory);
                byte[] bytes = memory.ToArray();
                image.Source = ImageSource.FromStream(() => new MemoryStream(bytes));
                string base64 = System.Convert.ToBase64String(bytes);
            }

        }

        (sender as Button).IsEnabled = true;
    }

【讨论】:

  • 这会阻止应用程序崩溃,但现在 base64 = Xamarin.Forms.StreamImageSource
  • @MysteryMan 你不能得到base64吗?我可以用这个方法正确得到base64。
【解决方案2】:

试试看。

public static class StreamExtensions
{
    public static string ConvertToBase64(this Stream stream)
    {
        var bytes = new Byte[(int)stream.Length];

        stream.Seek(0, SeekOrigin.Begin);
        stream.Read(bytes, 0, (int)stream.Length);

        return Convert.ToBase64String(bytes);
    }
}


try {

    var base64String = stream.ConvertToBase64();

} catch (Exception ex){

    Console.WriteLine(ex.message);

}

【讨论】:

  • 这也会阻止应用程序崩溃,但会产生与上述 base64string = Xamarin.Forms.StreamImageSource 相同的问题
猜你喜欢
  • 2017-10-24
  • 1970-01-01
  • 2015-08-09
  • 2011-07-20
  • 1970-01-01
  • 1970-01-01
  • 2018-01-22
  • 1970-01-01
相关资源
最近更新 更多