如何在 C# 中使用 System.Drawing 图像进行 OCR 处理

如何在 C# 中读取 System.Drawing 对象

This article was translated from English: Does it need improvement?
Translated
View the article in English

System.Drawing.Bitmap是 .NET Framework 中的一个类,用于处理位图图像。 它提供了创建、操作和显示位图图像的方法和属性。

System.Drawing.Image是 .NET Framework 中所有 GDI+ 图像对象的基类。 它是各种图像类型的父类,包括System.Drawing.Bitmap

IronSoftware.Drawing.AnyBitmapIronDrawing中的一个位图类,IronDrawing 是一个开源库,最初由 Iron Software 开发。 它可以帮助 C# 软件工程师在 Windows、macOS 和 Linux 平台上的 .NET 项目中替换System.Drawing.Common

快速入门:从 System.Drawing.Bitmap 读取文本

只需一条简单的语句,即可创建一个IronTesseract ,并向其提供一个由OcrImageInput包装的System.Drawing.Bitmap ,以提取所有文本。 这个快速入门示例展示了 IronOCR 如何轻松地将图像转换为可读文本,只需极少的设置。

Nuget Icon立即开始使用 NuGet 创建 PDF 文件:

  1. 使用 NuGet 包管理器安装 IronOCR

    PM > Install-Package IronOcr

  2. 复制并运行这段代码。

    var result = new IronOcr.IronTesseract().Read(new IronOcr.OcrImageInput(new System.Drawing.Bitmap("image.png")));
  3. 部署到您的生产环境中进行测试

    立即开始在您的项目中使用 IronOCR,免费试用!
    arrow pointer


读取 System.Drawing.Bitmap 示例

首先,实例化IronTesseract类以执行 OCR。 使用各种方法之一创建System.Drawing.Bitmap 。 在代码示例中,我决定使用文件路径。

接下来,使用using语句创建OcrImageInput对象,并将System.Drawing.Bitmap对象中的图像传递给它。 最后,使用Read方法执行 OCR。

:path=/static-assets/ocr/content-code-examples/how-to/input-system-drawing-read-bitmap.cs
using IronOcr;
using System.Drawing;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Read image file to Bitmap
Bitmap bitmap = new Bitmap("Potter.tiff");

// Import System.Drawing.Bitmap
using var imageInput = new OcrImageInput(bitmap);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
Imports IronOcr
Imports System.Drawing

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Read image file to Bitmap
Private bitmap As New Bitmap("Potter.tiff")

' Import System.Drawing.Bitmap
Private imageInput = New OcrImageInput(bitmap)
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)
$vbLabelText   $csharpLabel

读取 System.Drawing.Image 示例

System.Drawing.Image读取图像非常简单,只需使用图像创建OcrImageInput对象,然后使用Read方法执行标准 OCR 过程即可。

:path=/static-assets/ocr/content-code-examples/how-to/input-system-drawing-read-image.cs
using IronOcr;
using Image = System.Drawing.Image;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Open image file as Image
Image image = Image.FromFile("Potter.tiff");

// Import System.Drawing.Image
using var imageInput = new OcrImageInput(image);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
Imports IronOcr
Imports Image = System.Drawing.Image

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Open image file as Image
Private image As Image = Image.FromFile("Potter.tiff")

' Import System.Drawing.Image
Private imageInput = New OcrImageInput(image)
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)
$vbLabelText   $csharpLabel

阅读 Iron Software.Drawing.AnyBitmap 示例

同样地,在创建或获取AnyBitmap对象之后,您可以构造OcrImageInput类。 构造函数将负责导入数据的所有必要步骤。 下面的代码示例演示了这一点。

:path=/static-assets/ocr/content-code-examples/how-to/input-system-drawing-read-anybitmap.cs
using IronOcr;
using IronSoftware.Drawing;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Open image file as AnyBitmap
AnyBitmap anyBitmap = AnyBitmap.FromFile("Potter.tiff");

// Import IronSoftware.Drawing.AnyBitmap
using var imageInput = new OcrImageInput(anyBitmap);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
Imports IronOcr
Imports IronSoftware.Drawing

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Open image file as AnyBitmap
Private anyBitmap As AnyBitmap = AnyBitmap.FromFile("Potter.tiff")

' Import IronSoftware.Drawing.AnyBitmap
Private imageInput = New OcrImageInput(anyBitmap)
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)
$vbLabelText   $csharpLabel

指定扫描区域

OcrImageInput类的构造中,您可以指定要扫描的区域。 这样就可以定义图像文档中用于 OCR 的特定区域。 根据图像文档的不同,指定扫描区域可以显著提高性能。 在提供的代码示例中,我指定只提取章节号和章节标题。

:path=/static-assets/ocr/content-code-examples/how-to/input-images-read-specific-region.cs
using IronOcr;
using IronSoftware.Drawing;
using System;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Specify crop region
Rectangle scanRegion = new Rectangle(800, 200, 900, 400);

// Add image
using var imageInput = new OcrImageInput("Potter.tiff", ContentArea: scanRegion);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);

// Output the result to console
Console.WriteLine(ocrResult.Text);
Imports IronOcr
Imports IronSoftware.Drawing
Imports System

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Specify crop region
Private scanRegion As New Rectangle(800, 200, 900, 400)

' Add image
Private imageInput = New OcrImageInput("Potter.tiff", ContentArea:= scanRegion)
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)

' Output the result to console
Console.WriteLine(ocrResult.Text)
$vbLabelText   $csharpLabel

OCR结果

阅读特定区域

常见问题解答

如何在 C# 中从位图图像中提取文本?

您可以通过首先创建 IronTesseract 类的实例来使用 IronOCR。然后,创建一个 System.Drawing.Bitmap 并将其传递给 OcrImageInput 对象。最后,使用 Read 方法提取文本。

OCR 任务中涉及读取 System.Drawing 对象的步骤是什么?

要使用 IronOCR 读取 System.Drawing 对象,请下载库、获取 System.Drawing 对象、构建 OcrImageInput 类,并在需要时定义裁剪区域。使用 AnyBitmap 以实现 Linux 和 macOS 的跨平台兼容性。

如何在 System.Drawing.Image 上执行 OCR?

要在 System.Drawing.Image 上执行 OCR,请使用图像创建 OcrImageInput 对象,并在 IronOCR 中执行 Read 方法。

在跨平台项目中使用 AnyBitmap 的好处是什么?

Iron Software.Drawing.AnyBitmap 允许开发人员替换 System.Drawing.Common 以实现跨平台解决方案,使OCR功能能够在 Windows、macOS 和 Linux 上运行。

扫描区域如何改善 OCR 性能?

通过在 OcrImageInput 类中定义特定的扫描区域,可以将 OCR 工作专注于相关区域,从而显著提高性能和准确性。

IronOCR 与 Linux 和 macOS 兼容吗?

是的,使用 Iron Software.Drawing.AnyBitmap 时,IronOCR 与 Linux 和 macOS 兼容,为 OCR 任务提供跨平台解决方案。

如何指定图像中需要扫描的区域进行 OCR?

在 IronOCR 中,通过在 OcrImageInput 类中设置坐标和尺寸来指定扫描区域,从而通过专注于相关图像部分来提高 OCR 性能。

在 .NET OCR 项目中处理图像必不可少的类有哪些?

.NET OCR 项目中,像 System.Drawing.BitmapSystem.Drawing.ImageIron Software.Drawing.AnyBitmap 这样的类是处理图像的关键。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

审核者
Jeff Fritz
Jeffrey T. Fritz
首席项目经理 - .NET 社区团队
Jeff 也是 .NET 和 Visual Studio 团队的首席项目经理。他是 .NET Conf 虚拟会议系列的执行制片人,并主持“Fritz and Friends”直播节目,每周两次与观众一起谈论技术并编写代码。Jeff 撰写研讨会、演示文稿并计划包括 Microsoft Build、Microsoft Ignite、.NET Conf 和 Microsoft MVP 峰会在内的最大型微软开发者活动的内容。
准备开始了吗?
Nuget 下载 5,167,857 | Version: 2025.11 刚刚发布