如何使用VB.net从HTML文件中提取内嵌base64格式图片并保存
实现方案
核心思路
你的场景非常固定,每个HTML仅包含1个base64内嵌的img标签,不需要复杂的第三方依赖即可实现:首先从HTML文本中提取base64编码段,再解码写入本地为对应格式的图片文件即可。
实现步骤
- 新建.NET控制台/类库项目,简单场景下原生API即可满足需求,无需引入额外NuGet包
- 遍历目标文件夹下所有后缀为.html的文件
- 读取每个HTML的文本内容,匹配提取img标签src属性中的base64编码和图片格式标识
- 解码base64字符串为字节数组
- 按原HTML文件名+对应图片后缀命名,将字节数组写入指定输出路径
完整可运行代码示例
using System; using System.IO; using System.Text.RegularExpressions; namespace Base64ImageExtractor { class Program { static void Main(string[] args) { // 替换为你的HTML文件所在文件夹路径 string htmlFolderPath = @"C:\Your\Html\Storage\Path"; // 替换为图片保存的目标文件夹路径 string outputImageFolder = @"C:\Your\Image\Output\Path"; // 自动创建不存在的输出文件夹 if (!Directory.Exists(outputImageFolder)) { Directory.CreateDirectory(outputImageFolder); } // 读取所有HTML文件 string[] htmlFiles = Directory.GetFiles(htmlFolderPath, "*.html"); foreach (string htmlPath in htmlFiles) { try { string htmlContent = File.ReadAllText(htmlPath); // 正则匹配base64格式的图片资源 Regex base64ImgRegex = new Regex(@"data:image/(?<format>png|jpg|jpeg);base64,(?<base64Content>[^""]+)"); Match matchResult = base64ImgRegex.Match(htmlContent); if (matchResult.Success) { string imgFormat = matchResult.Groups["format"].Value; string base64Str = matchResult.Groups["base64Content"].Value; // 解码base64为字节数组 byte[] imgBytes = Convert.FromBase64String(base64Str); // 生成输出文件名,复用原HTML文件名避免冲突 string fileName = Path.GetFileNameWithoutExtension(htmlPath); string outputPath = Path.Combine(outputImageFolder, $"{fileName}.{imgFormat}"); // 写入本地文件 File.WriteAllBytes(outputPath, imgBytes); Console.WriteLine($"提取成功:{outputPath}"); } else { Console.WriteLine($"跳过文件{htmlPath}:未匹配到有效base64图片"); } } catch (Exception ex) { Console.WriteLine($"处理文件{htmlPath}失败:{ex.Message}"); } } Console.WriteLine("全部文件处理完成"); Console.ReadKey(); } } }
适配调整说明
- 如果你的HTML中img标签用的是单引号包裹src属性,把正则中的
[^""]修改为[^']即可适配 - 若后续需要处理结构更复杂的HTML,可引入AngleSharp库做DOM解析提取src属性,避免正则匹配漏判
- 处理单文件体积超过10M的base64图片时,可换成流式读取解码逻辑降低内存占用
内容的提问来源于stack exchange,提问作者jiju kj
相关产品推荐
相关产品推荐

