You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#实现WebP Base64转JPG/PNG Base64(无需存文件)求助

WebP Base64 转 JPG/PNG Base64(无需保存文件)

核心思路是用MemoryStream替代本地文件流,完成格式转换后直接将流内容转为Base64字符串,全程不需要写入本地文件。

关键注意点

  • .NET Framework 默认的Image.FromStream不支持WebP格式,需要引入第三方库(如WebP.Net或ImageSharp)实现WebP解码
  • .NET Core/.NET 5+ 若使用System.Drawing.Common,仅推荐Windows平台使用;跨平台场景优先选择ImageSharp这类原生跨平台图像库

方案1:Windows平台使用 System.Drawing

已解决WebP支持问题的Windows环境下,可修改代码如下:

using System.Drawing;
using System.Drawing.Imaging;
using System.IO;

public string ConvertWebpBase64ToJpgBase64(string webpBase64)
{
    // 将WebP Base64转为字节数组并加载为Image对象
    byte[] webpBytes = Convert.FromBase64String(webpBase64);
    using (Image image = Image.FromStream(new MemoryStream(webpBytes)))
    {
        // 创建内存流存储转换后的图片
        using (MemoryStream outputStream = new MemoryStream())
        {
            // 保存为JPG格式(替换为ImageFormat.Png可转PNG)
            image.Save(outputStream, ImageFormat.Jpeg);
            // 将内存流转为Base64字符串返回
            return Convert.ToBase64String(outputStream.ToArray());
        }
    }
}

方案2:跨平台使用 ImageSharp

ImageSharp原生支持WebP解码,兼容性更强。先安装NuGet依赖:

Install-Package SixLabors.ImageSharp
Install-Package SixLabors.ImageSharp.Webp

转换代码示例:

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Formats.Jpeg;
using SixLabors.ImageSharp.Formats.Webp;
using SixLabors.ImageSharp.PixelFormats;
using System.IO;

// 转JPG
public string ConvertWebpBase64ToJpgBase64(string webpBase64)
{
    byte[] webpBytes = Convert.FromBase64String(webpBase64);
    using (Image<Rgba32> image = Image.Load(webpBytes, new WebpDecoder()))
    {
        using (MemoryStream outputStream = new MemoryStream())
        {
            // 可配置JPG质量(0-100)
            image.Save(outputStream, new JpegEncoder { Quality = 90 });
            return Convert.ToBase64String(outputStream.ToArray());
        }
    }
}

// 转PNG
public string ConvertWebpBase64ToPngBase64(string webpBase64)
{
    byte[] webpBytes = Convert.FromBase64String(webpBase64);
    using (Image<Rgba32> image = Image.Load(webpBytes, new WebpDecoder()))
    {
        using (MemoryStream outputStream = new MemoryStream())
        {
            image.Save(outputStream, new SixLabors.ImageSharp.Formats.Png.PngEncoder());
            return Convert.ToBase64String(outputStream.ToArray());
        }
    }
}

内容的提问来源于stack exchange,提问作者jesbalchiero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 21:48:20