.net提取内容中的图片地址

本文介绍了一种从HTML内容中提取第一张图片的方法,并提供了一个实用的C#代码示例,该方法对于需要从前端展示内容中快速获取图片的应用场景非常有用。


目前在做项目中有一个曝光台栏目 ,发布信息时是没有单独的图片字段的,只有一个编辑器来保存内容,但是前台显示风格是图片排列的,为了达到效果,只能从内容中提取图片来显示到前台。参考了一下网上案例,自己写了一个获取内容中的第一张图片地址 的方法。

  /// <summary>
        /// 获取内容中的第一张图片
        /// </summary>
        /// <param name="htmlText">内容字符串</param>
        /// <returns>返回图片路径</returns>
        public string GetFirstImages(string htmlText)
        {
            string imgsrc = "";//这里可以设置一个默认图片,就是在内容中没有图片的时候来显示默认图片。
            int startIndex = htmlText.IndexOf("<img");//有图片标签则返回当前索引值,没有则返回-1
            if (startIndex >= 0)
            {
                int endIndex = htmlText.IndexOf(">", startIndex);//从上次获取的图片索引值开始查找,到第一个 >  符号结束为止。
                string imgLabel = htmlText.Substring(startIndex, endIndex - startIndex + 1);//获取到img标签
                string[] imgAttr = imgLabel.Split(' ');// "将图片属性根据空格分开"
                foreach (string item in imgAttr)//遍历属性
                {
                    if (item.IndexOf("src") >= 0)//如果有src属性,把值 保存起来  保存的是完整的src属性  :src=""
                    {
                        imgsrc = item.ToString();
                        break;
                    }

                }
                return imgsrc = imgsrc.Substring(imgsrc.IndexOf('"') + 1, imgsrc.LastIndexOf('"') - imgsrc.IndexOf('"') - 1);//把保存的src属性中的值取出来 去掉src="和最后一个"
            }

            return imgsrc;

        }


建立 了一个类,写了一个公用方法。需要用的时候来调用 就行了。

欢迎加群交流.Net技术交流


<think>好的,我现在需要帮助用户在VB.NET中实现从图片提取文本(OCR)并导出到Excel表格的功能。首先,我得回顾用户的问题,确保理解正确。用户希望知道如何在VB.NET中使用OCR技术,将图片中的文字提取出来,然后导出到Excel。这可能涉及到OCR库的选择、图像处理、文本提取以及Excel操作几个步骤。接下来,我需要考虑用户可能的开发环境。VB.NET通常使用VisualStudio作为开发工具,所以需要推荐一些可以在该环境中集成的OCR库。根据之前提供的引用内容,比如引用3提到了Tesseract、GlyphReader和Abbyy等OCR引擎,这些可能是可行的选项。特别是Tesseract,它是一个开源的OCR引擎,适合免费使用,而Abbyy可能更强大但需要商业许可。首先,安装和配置OCR库。对于Tesseract,用户需要安装Tesseract引擎,并在VB.NET项目中通过NuGet包管理器添加Tesseract的.NET包装库,比如Tesseract.NET。这一步可能需要指导用户如何添加引用,以及处理可能的依赖项,比如将语言数据文件(tessdata)包含到项目中,并设置正确的路径。然后,处理图像。用户需要加载图片文件,可能需要进行预处理,比如调整大小、灰度化、二值化等,以提高OCR的识别率。这部分可能需要使用图像处理库,比如System.Drawing或Emgu.CV,但根据用户提供的引用3,DotImage也支持图像处理,所以可能需要结合这些工具。 接下来是OCR识别过程。调用Tesseract引擎进行文本识别,获取识别后的文本。这里需要处理可能的异常,比如图片质量差导致的识别错误,或者语言不支持的问题。用户可能需要指定正确的语言包,比如中文需要chi_sim.traineddata文件。 然后是导出到Excel。VB.NET操作Excel通常可以通过Interop.Excel库,但需要注意这会依赖安装Office,且可能有版本问题。另一种方法是使用第三方库,比如ClosedXML,它不需要安装Excel,可以直接创建和编辑.xlsx文件。这可能更可靠和方便。需要指导用户如何添加ClosedXML的NuGet包,并编写导出数据的代码。还需要考虑整个流程的步骤:选择图片、OCR处理、数据整理、导出Excel。可能需要编写事件处理,比如按钮点击事件来触发OCR和导出操作。同时,错误处理也很重要,比如处理图片加载失败、OCR识别错误、Excel文件写入权限等问题。用户可能需要示例代码,所以需要提供关键代码片段,比如初始化Tesseract引擎、处理图片读取文本、写入Excel的代码。同时,需要注意代码的格式和注释,确保用户能够理解每一步的作用。 另外,根据引用2提到的功能,如自动检测文字区域、多页处理、多语言支持,可能需要建议用户如何实现这些高级功能,但用户当前的问题可能只需要基础功能,所以先专注于基本实现,再提及优化方法。 最后,生成相关问题,帮助用户深入学习和解决可能遇到的问题,比如如何处理复杂排版的图片、如何提高识别率、如何处理多语言文本等。总结步骤:1.选择OCR库(Tesseract为例)。2.安装必要的NuGet包和依赖项。3.编写图片加载和预处理代码。4.调用OCR识别文本。5.将文本整理成结构化的数据。6.使用ClosedXML导出到Excel。7.错误处理和优化建议。</think>在VB.NET中实现OCR图片识别并导出到Excel的步骤如下: ### 一、环境准备 1. 安装Tesseract OCR引擎 ```bash choco install tesseract # 通过Chocolatey安装 ``` 2. 添加NuGet包引用: - Tesseract.NET.SDK(OCR核心库) - ClosedXML(Excel操作库) ### 二、核心代码实现 ```vb Imports Tesseract Imports ClosedXML.Excel Public Sub OCRToExcel(imagePath As String, outputPath As String) ' OCR处理 Using engine As New TesseractEngine("./tessdata", "eng+chi_sim", EngineMode.Default) Using img = Pix.LoadFromFile(imagePath) Using page = engine.Process(img) Dim result = page.GetText() ' Excel导出 Using wb = New XLWorkbook() Dim ws = wb.Worksheets.Add("OCR结果") ws.Cell(1, 1).Value = "识别内容" ws.Cell(2, 1).Value = result wb.SaveAs(outputPath) End Using End Using End Using End Using End Sub ``` ### 三、高级优化建议 1. **图像预处理**:使用`System.Drawing`调整对比度 ```vb Using bmp = New Bitmap(imagePath) Using g = Graphics.FromImage(bmp) ' 调整对比度参数 Dim cm = New Imaging.ColorMatrix(New Single() { {2, 0, 0, 0, 0}, {0, 2, 0, 0, 0}, {0, 0, 2, 0, 0}, {0, 0, 0, 1, 0}, {0, 0, 0, 0, 1}}) Using ia = New Imaging.ImageAttributes() ia.SetColorMatrix(cm) g.DrawImage(bmp, New Rectangle(0, 0, bmp.Width, bmp.Height), 0, 0, bmp.Width, bmp.Height, GraphicsUnit.Pixel, ia) End Using End Using bmp.Save(preprocessedPath) End Using ``` 2. **表格结构化处理**: ```vb Dim lines = result.Split(vbLf) For i As Integer = 0 To lines.Length - 1 Dim cells = lines(i).Split(vbTab) For j As Integer = 0 To cells.Length - 1 ws.Cell(i+2, j+1).Value = cells(j) Next Next ``` ### 四、常见问题处理 1. 中文识别需添加语言包: ```vb ' 下载chi_sim.traineddata放入tessdata目录 engine = New TesseractEngine("./tessdata", "chi_sim", EngineMode.LstmOnly) ``` 2. 提高识别精度方法: - 设置PSM模式:`page.LayoutAnalysisMode = PageSegMode.SparseText` - 添加自定义词典:`engine.SetVariable("user_words_file", "custom.txt")` [^1]: Tesseract官方推荐预处理方法 [^2]: ClosedXML文档中关于数据导出的说明
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值