简介
LEADTOOLS是用于Windows、WinRT和HTML5的世界顶级图像SDK,已经发布了版本18。版本18中最让人兴奋的新功能就是LEADTOOLS Anywhere™,这个屡获殊荣的新技术可以移植到多个平台,包括 WinRT、iOS、OS X、Android 和Linux。
LEADTOOLS先进的iOS和OS X图像SDK技术为开发者提供了创建 Apple iPhone、iPad和Macintosh上图像应用所需的一切。查看器、注释和标记、OCR、条码、PDF、图像格式、压缩、图像处理等只是LEADTOOLS为Apple平台开发者提供的多种功能的一部分。
LEADTOOLS SDK中的主要iOS&OS X功能
1. 针对 iPhone、 iPad 和Mac的通用框架
1.1. Xcode 3.2 及以上版本
1.2. iOS 4 及以上版本
1.3. OS X Lion (10.7) 及以上版本
2. 全面和易于使用的Objective-C类库,类似于其他的LEADTOOLS库,如.NET和Android
3. 加载、转换和保存150余种图像格式
3.1. 高级的位深度、颜色空间和常见格式的压缩支持,包括PDF、PDF/A、JPEG、JPEG 2000、TIFF、 JBIG2等
4. 交互式图像查看器
4.1. 触摸屏交互模式
4.2. 令人难以置信的图像质量的视网膜显示优化
4.3. 使用内置图像处理快速处理图像
4.4. 基于物理和逻辑单元显示图像
5. 用于增强、校正和处理图像的200多种图像处理方法
6. 全面的注释和标记,包括几何形状、便利贴、编校、高亮和橡皮图章
7. OCR将图像转化为可搜索的文本
QR、PDF417、数据矩阵、UPC/EAN等的数据读写
一个iOS例子:OCR和条码
在这篇文章中,我们将为您展示如何使用LEADTOOLS全新iOS库的OCR识别文本,从图形中读取条码。
获取一个LEADTOOLS图像
在iOS中定义图像的对象是标准 UIImage(或是低级的CGImage)。在app中你可以通过多种方式获取一个图像:
l 直接从应用程序包里加载图像
l 浏览设备的照片库
l 通过设备的摄像头实时捕捉
LEADTOOLS库使用 LTRasterImage对象完成所有的图像显示和处理。幸运的是,LEADTOOLS提供了转换工具,将与iOS的操纵变得简单,只需几行代码就能完成:
// 从包或照片库获取图像,或实时捕捉
UIImage* uiImage = ...
// 使用默认选项将UIImage转化为LTRasterImage
LTRasterImage* rasterImage = [LTRasterImageConverter convertFromImage:uiImage
options:LTConvertFromImageOptions_None
error:nil];
现在,我们有一个图像,我们可以使用LEADTOOLS提供的高级图像技术,如OCR和条码。
OCR例子
首先,我们需要一个LEADTOOLS OCR引擎实例:
// 创建一个LEADTOOLS OCR引擎实例
LTOcrEngine* ocrEngine = [LTOcrEngineManager createEngine:LTOcrEngineType_Advantage];
// 使用默认参数启动引擎..我们已经将OCR引擎需要的语言数据文件添加到主包中了
NSString* bundlePath = [[NSBundle mainBundle] bundlePath];
[ocrEngine startup:nil workDirectory:nil startupParameters:bundlePath];
// 可选的,在这里修改OCR引擎的设置(通过ocrEngine.settingsManager)
下面,我们创建一个新的OCR文档,将我们的图像作为一页添加进去:
// 首先创建一个文档
LTOcrDocument* ocrDocument = [ocrEngine.documentManager createDocument];
// 将图像作为一页添加到文档页集合中
LTOcrPage* ocrPage = [ocrDocument.pages addPageWithImage:rasterImage
target:nil
selector:nil
error:nil];
// 你可以通过ocrPage.zones collection在页面中添加手工区域(文本或图形区域)。此例中,我们//让引擎自动分区。
最后,识别页面、获取文档:
// 识别,将结果打印到控制台上
NSString* result = [ocrPage recognizeText:nil
selector:nil
error:nil];
printf("%s\n", result.UTF8String);
LEADTOOLS还提供了高级自定义处理的低级控件。例如,你可以获取结果字符,同时获取它们的位置、字体属性和置信度信息:
// 识别页面
[ocrPage recognize:nil selector:nil error:nil];
LTOcrPageCharacters* pageCharacters = [ocrPage getRecognizedCharacters:nil];
// 显示字符
for (LTOcrZoneCharacters* zoneCharacters in pageCharacters)
{
NSArray* words = [zoneCharacters getWords];
for (LTOcrWord* word in words)
{
// 显示值和位置
printf("Word: %s at %d,%d,%d,%d\n",
word.value.UTF8String,
word.bounds.x,
word.bounds.y,
word.bounds.x + word.bounds.width,
word.bounds.y + word.bounds.height);
}
}
条码例子
就像OCR一样,我们首先必须创建一个LEADTOOLS条码引擎的实例:
// 创建一个LEADTOOLS条码引擎的实例
LTBarcodeEngine* barcodeEngine = [LTBarcodeEngine new];
// 获取条码读取对象
LTBarcodeReader* barcodeReader = barcodeEngine.reader;
// 在这里,你可以通过barcodeReader成员修改条码读取选项(如搜索方向、错误检查等)。在此例中//我们使用了默认选项。
下面我们设置一些搜索选项,然后从图像中读取条码。还可以缩小搜索范围至特定的条码类型或区域,但是此例中我们在图像中搜索任意类型的条码:
// 读取图像中的条码,首先设置选项:图像的搜索位置和大小。此处为整个图像。
LeadRect searchBounds = LeadRect_Empty();
// 我们感兴趣的条码 (条码类型如UPC-A, UPC-E,/QR等) 。此处为所有类型。
LTBarcodeSymbology* symbologies = nil;
// 调用readBarcode
LTBarcodeData* barcodeData = [barcodeReader readBarcode:rasterImage
searchBounds:searchBounds
symbologies:symbologies
symbologiesCount:0
error:nil];
LTBarcodeData对象包含了找到的条码的信息,如类型、值、位置等。有了这些信息,你就可以充分发挥创造力为客户提供超赞的app。例如,你可以在产品上执行一个价格审查web搜索,或者跳转至条码中嵌入的web页面。此例中,我们只是将条码信息输出到控制台上:
if (barcodeData != nil)
{
// 我们有一个条码
//获取条码类型的名称,如UPC-A,UPC-E, QR, EAN等。
NSString* symbology = [LTBarcodeEngine getSymbologyFriendlyName:barcodeData.symbology];
// 获取图像中的位置
LeadRect bounds = barcodeData.bounds;
// 获取数据的文本表示
NSString* value = barcodeData.value;
// 将结果打印到控制台上
NSString* result = [NSString stringWithFormat:
@"Found %@ barcode at %d,%d,%d,%d\nData: %@",
symbology,
bounds.x, bounds.y,
bounds.x + bounds.width,
bounds.y + bounds.height,
value];
printf("%s\n", result.UTF8String);
}else
{
printf("No barcode found\n");
}