将图像转换为 Base64 字符串

Posted

技术标签:

【中文标题】将图像转换为 Base64 字符串【英文标题】:Convert Image to Base64 string 【发布时间】:2018-09-07 03:31:22 【问题描述】:

我正在尝试使用 StorageFile 在 UWP 中将图像文件转换为 Base64 字符串 这是我的方法:

public async Task<string> ToBase64String(StorageFile file)

    var stream = await file.OpenAsync(FileAccessMode.Read);
    var decoder = await BitmapDecoder.CreateAsync(stream);
    var pixels = await decoder.GetPixelDataAsync();
    var bytes = pixels.DetachPixelData();
    return await ToBase64(bytes, (uint)decoder.PixelWidth, (uint)decoder.PixelHeight, decoder.DpiX, decoder.DpiY);

ToBase64 是这样的:

private async Task<string> ToBase64(byte[] image, uint pixelWidth, uint pixelHeight, double dpiX, double dpiY)

    //encode
    var encoded = new InMemoryRandomAccessStream();
    var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, encoded);
    encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight, pixelWidth, pixelHeight, dpiX, dpiY, image);
    await encoder.FlushAsync();
    encoded.Seek(0);

    //read bytes
    var bytes = new byte[encoded.Size];
    await encoded.AsStream().ReadAsync(bytes, 0, bytes.Length);

    return System.Convert.ToBase64String(bytes);

并从我的 MainPage.xaml.cs 调用它

StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
string square_b64 = converter.ToBase64String(await storageFolder.GetFileAsync("Image.png")).Result;

但是,这不起作用。有注意的吗?

【问题讨论】:

你能定义“不工作”吗? 应用程序崩溃,调试器无法正常工作。 你是在调试还是发布模式下编译?代码优化是打开还是关闭?如果您正在发布或优化正在调试中,则不会像您期望的那样运行(如果有的话)。 您是否尝试过设置断点或逐行运行您的代码?会给你一个提示问题实际出在哪里。 1.对于 Broot 的问题:在调试模式 2 中。对于 Norman:我试过了。事情是断点被触发,然后当我逐行执行时,应用程序冻结并关闭。 【参考方案1】:
StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
StorageFile file1 = await storageFolder.GetFileAsync("Image.png");

string _b64 = Convert.ToBase64String(File.ReadAllBytes(file1.Path));

这对我有用。

【讨论】:

以上是关于将图像转换为 Base64 字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何将图像转换为 Base64 字符串,并转换回图像,保存到 azure blob

Android将base64编码的字符串转换为图像视图

将base 64编码字符串转换为图像

在 iOS 上使用 Phonegap 将图像转换为 Base64 字符串

如何将 base64 字符串格式的图像转换为清晰图像缩小器期望的数据类型?

完整图像资产未转换为 base64 字符串