dNet图像处理组件学习总结

关于.NET下开源及商业图像处理(PSD)组件



http://www.cnblogs.com/Leo_wl/archive/2013/03/21/2973299.html
【原创】.NET开源压缩组件介绍与入门
【原创翻译】C#开源轻量级对象数据库NDatabase介绍
【转载总结】关于泛型基类的相关知识
NewLife.Xcode组件资源目录
Newlife.XCode对象容器与接口操作实例
拥有自己的代码生成器—NewLife.XCode代码生成器分析
拥有自己的代码生成器—Newlife.XCode模板编写教程


1 前言
这篇博客的背景是:为了完成吉日嘎拉的“PSD文件损坏检测和图层检测”任务,查找了目前.NET各种开


源的及商业的图像处理资料,在完成任务之后,进行总结。此次任务主要是用C#操作PSD(PhotoShop)文


件,中文资料很少,主要的英文资料都在CodeProject网站。项目要求对用户上传的PSD文件进行检测,


是否损坏,是否能正常打开,并判断是否只有1个图层。俗话说:“冰冻三尺非一日之寒”,这次找关于


C#处理PSD的开源资料,真是“挖地三尺”,我也觉得这“非一日之力”就可以做到。平时关注技术,了


解很多,找起来才快,也需要一点主动学习的能力。


2 .NET图像处理组件总结
说起图像处理,肯定很多人都知道博客园的xiaoite,用.NET做图像处理,很强大。由于图像处理的特殊


性,可能很多人认为.NET做图像处理效率有问题,但xiaoite用实际证明了其实这都不是问题,大家可以


去他的博客详细了解下。呵呵,我只是一个菜鸟,把别人现成的东西组合一下,会使用而已。那下面介


绍一下,我找到的几个.NET图像处理组件(和PSD相关的)。


2.1 Paint.NET


.NET下的图像处理开源项目,最有名的应该是Paint.NET,小巧,灵活,足够强大,相比笨重收费的


PhotoShop,这真是一个不错的选择。虽然该项目源代码现在不开放了,但软件使用仍然是免费的。昨天


看了一下他的dll,没有混淆,有精力的可以去反编译看看。我的解决办法也是从这个项目找到的答案。


Paint.NET的源代码3.1版本的应该还可以在网上找得到,另外Paint.NET也有很多插件,比如


Paint.NET_PSD_Plugin,就可以用插件来加载PSD文件,并转换为Paint.NET的格式。前几天,给一个朋友


PS2张简单的图片,用的就是Paint.NET,操作和PhotoShop差不多,界面很清爽,功能足够强大吧,推荐


一下。


2.2 Imagemagick.NET


Imagemagick.NET是用C#对开源的Imagemagick图像处理组件的进行了一个封装。里面的代码大部分都是


C++/CLI,能力有限,没有深入研究。看了一下说明,支持的格式很多,但对PSD文件的图层和文件损坏


检测也没有现成的,不过,这个项目的确很值得学习,有机会研究下 C++/CLI,对图像处理应该有很大


帮助。Imagemagick支持的语言和平台都很广泛,值得一看。


2.3 Skimpt


Skimpt其实这个组件以前没看到过,是一个.NET下开源的屏幕截图软件。它的大部分代码我没仔细看,


只发现它支持PSD文件,所以就主要看了看PSD操作的部分,相对不错,PSD代码部分也是借鉴了


CodeProject上面的几篇文章。都很相似,不过都修改了不少错误,这个其实还不错,勉强可以正确判断


图层,但是对PSD文件的损坏检测不了,它只是直接读取文件的头信息,并不去检验数据的正确性。如果


有做屏幕截图之类的工具,这是一个不错的参考。虽然没用里面的代码,但也发现Google Code其实也有


很多不错的项目。


2.4 ImageGlue.NET 


ImageGlue.NET是商业的图像处理组件,支持的格式列了一大堆:支持的格式。由于这个组件我很早就知


道,但没用过,手上也有破解版,所以就试了一下,可以对PSD文件的损坏检测,但是对图层的判断一直


出错,有时候是正确的,有时候是错误的,商业组件做成这样,一怒之下,抛弃它了,而且破解版也不


太敢用,当时只是试试看好用不,然后把里面的一小段代码弄出来就可以了,没想到这货还调用了非托


管的dll,代码没虽然有混淆,但命名空间足够的坑爹,对图像的一些基本处理应该还是不错的,关键是


支持的格式全面。留个脚印,让大家以后也有个选择。


2.5 其他关于.NET操纵PSD的文章


其实我首先查到的还是codeproject上的一篇2006年发表的英文博客Yet Another PSD Parser。该作者也


是为了完成一个PSD的项目,需要.NET操作PSD文件,而处于版权和许可证的原因,没有采用Adobe公司的


SDK,而是自己开发了这套组件。这个组件也是作者Endogine项目(一个2D的图像游戏引擎)的一部分,但


可惜的是这个组件好像没有完善,这篇文章也没有更新,有不少错误。


3.相关资源网址
http://psdplugin.codeplex.com/


http://www.codeproject.com/Articles/10768/Endogine-sprite-engine


http://www.codeproject.com/Articles/15905/Yet-Another-PSD-Parser


http://www.websupergoo.com/download.htm


PSD官方格式信息


http://www.adobe.com/devnet-apps/photoshop/fileformatashtml/


http://www.aurigma.com/docs/gm/Overview.htm


http://midimick.com/magicknet/magickDoc.html


http://www.codeproject.com/Articles/17852/ImageMagick-in-VB-NET


http://code.google.com/p/skimpt/


http://imagemagick.codeplex.com/releases/view/30302
========

Windows 图像处理组件

http://www.microsoft.com/zh-cn/download/details.aspx?id=32


选择语言:


下载
Windows 图像组件 (WIC) 提供启用 WIC 功能的应用程序,可显示并编辑安装有兼容 WIC 编解码器的任


何一种图像格式,还能读写图像文件中的元数据。
详情
Note:There are multiple files available for this download.Once you click on the "Download" 


button, you will be prompted to select the files you need.
版本:
1.0
File Name:
wic_x86_enu.exe
wic_x86_chs.exe
wic_x86_deu.exe
wic_x86_esn.exe
wic_x86_fra.exe
出版日期:
2009/11/23
File Size:
1.2 MB
1.2 MB
1.2 MB
1.2 MB
1.2 MB
+ More
Windows 图像处理组件可发现新的私有图像格式(如 Raw)。对于使用 WIC 的应用程序而言,只要计算


安装有 CODEC(编/解码器),便可使用新的图像格式。WIC 包括 JPEG、TIFF、GIF、PNG 和 BMP 格式


的更新编解码器,比这些格式以前版本的编解码器更安全,同时还支持名为 Windows Media Photo 的新


增高性能图像格式。 除此之外,WIC 还提供常用图像元数据格式的元数据读写器,可使应用程序在图像


文件内部保留元数据,不必创建“sidecar 文件”。
========

运行此安装程序之前,必须安装 32 位 Windows 映像处理组件(WIC)解决办法



http://blog.chinaunix.net/uid-7868752-id-4977488.html
“32 位 Windows 映像处理组件(WIC)的安装和解决办法”
坦白得说,这个问题我还是第一次遇到。
今天安装Microsoft .NET Framework 4的时候,遇到一个问题,系统提示:运行此安装程序之前,必须


安装 32 位 Windows 映像处理组件(WIC)。
于是就到官方找了一下,原来就是这个安装包:
http://www.microsoft.com/downloads/zh-cn/details.aspx?familyid=8e011506-6307-445b-b950-


215def45ddd8&displaylang=zh-cn
下载第一个wic_x86_chs.exe 并安装,然后再运行Microsoft .NET Framework 4,一切OK了。 


今天安装Microsoft .NET Framework 4的时候,遇到一个问题,系统提示:运行此安装程序之前,必须


安装 32 位 Windows 映像处理组件(WIC)。
于是就到官方找了一下,原来就是这个安装包:
http://www.microsoft.com/downloads/zh-cn/details.aspx?familyid=8e011506-6307-445b-b950-


215def45ddd8&displaylang=zh-cn
下载第一个wic_x86_chs.exe 并安装,然后再运行Microsoft .NET Framework 4,一切OK了。


========

几种图像处理库的研究

http://blog.csdn.net/lxw907304340/article/details/45318969 
目录(?)[+]


http://blog.csdn.net/byxdaz/article/details/3972293


目前比较出名的图像处理库有很多,比如LEADTOOLS,这个是功能非常强大的图像多媒体库,但是这个是


收费注册的。开源的图像库也有不少,比如:ImageStone、GIMP、CxImage等,虽然它们的功能没有


LEADTOOLS强大,但是一般的图像处理是可以应付的。


下面分别介绍这几种图像处理库的使用方法。


LEADTOOLS
LEAD Technologies 是一个拥有九年多开发数字图形技术历史的公司,他专为程序开发者提供软件开发


工具包。他已经为微软等公司提供了很多图形图象技术。这个软件包是该公司开发的开发工具的集合,


包括占线帮助,Lead API、C++ 类库、ActiveX 控件、VCLs 和一些实例原代码等。这个软件包是开发工


具的集合包括占线帮助,Lead API、C++ 类库、ActiveX 控件、VCLs 和一些实例原代码等。
(1)对显示设备的全面支持:在显示时,你的程序中无需考虑是哪种显示模式,如16色还是真彩色。


LeadTools为你做了所有的事。当然你也可以通过设置参数获得对显示设备更多的控制。你还可以实现自


己的调色板。


(2)支持多种文件格式:表10.1是LeadTools所支持的常用文件格式,其中读表示用LeadTools能打开的文


件格式,写表示LeatTools能存成的文件格式:


(3)图象处理:如二值化、平滑、加噪声、增加对比度、色调、饱和度、亮度、Gamma校正、中值滤波、


半影调、抖动、橡皮筋、滚动、填充、反色、镜象、马赛克、浮雕、打印、扫描、拷贝、粘贴、裁剪、


缩放、截屏、调色板、直方图、有关数据库的操作、还有制作幻灯的功能,如淡入、淡出、卷帘等等、


真的很爽。表10.2是Version5.1的所有属性、事件、和方法列表,看看有没有你所需要的功能。以字母


顺序排列,其中标[P]的表示只有专业级(Professional)和特殊级(Express)用户才能使用。


(4) 新增功能:


Vector的新功能


Annotations的新对象和新功能


OCR Module 更新


新增模块:ICR Module


新增模块:OMR Module (Forms 处理)


新增的公共图象对话框


100余种图象处理功能


DjVu® ,KDC和其他的新格式支持


Medical Imaging 更新


Multimedia 更新


C++ Class Lib 更新


COM Object 更新,包含新的.NET 示例


相关包的破解地址:http://www.greatcracks.com/cracked_software/l4


相关开发包介绍:


LEADTOOLS Medical Imaging SDK


LEADTOOLS Medical Imaging包含了一些精心挑选的、经过优化的特性,可以满足医疗成像应用程序开发


的特殊需要,比如,完全的DICOM数据集支持,可以支持8-16位灰度级,以及12和16位的图像处理,窗位


(Window Leveling)显示,还包含LUT处理。


特征综述


支持8、10、12、16灰度级和24位图像,包括JPEG(8、10、12、16位无损灰度级,8、12位有损灰度级,


24位无损和有损色彩),JPEG2000(包括有损和无损8-16位灰度级图像和24位色彩)行程,无压缩,光


学表示(单色1、单色2、调色板、RGB、ARGB、CMYK、YBR 全422、YBR全、YBR_RCT、YBR_ICT),以及单


框架和多框架图像。


完全支持DICOM 3(2003文件规范),包括所有标准的IOD类和形态(CR、CT、MR、NM、US、RF、SC、VL


等),还包含VR’s。


为DICOM的基本目录提供简单的执行操作和完全技术支持。只需要几行代码就可以使用高级COM对象来创


建DICOMDIR。


通过调用一个函数,可以将一种转移语法变为另一种转移语法。自动识别DICOM文件(Little-


Endian/Big-Endian,隐藏/显示VR等等)。并具有高级和低级函数,可用于数据集的简单导航和操作(


插入、删除、修改)。


单框架或多框架的图像(压缩的或未压缩的)。


对大量不同厂商的硬件支持。


包含了可使用的源代码和可执行代码。


对DICOM有4个不同的编程接口-API、COM、VCL、C++类库。支持DICOM2003标准中所有的VR’s,包括“


其它浮动字符串”。


具有高级和低级函数,可用于数据集的简单导航和操作(插入、删除、修改)。


LEADTOOLS自动加入了项定界项和序列定界项以简化数据集的嵌套(VR of “SQ”)。


易于对项进行顺序定位(FFFE,E000)。


简化了重组处理(多重覆盖和曲线数据)。


支持对单框架或多框架压缩或未压缩图像的像素数据的封装或本机编码。 
DICOM LUT/Overlay/Palette支持。在LEADTOOLS Medical Imaging中,对于Modality


LUT,VOI LUT,Palette色彩图像的高级支持意味着开发人员可以毫不费力地在一个应用程序中实现


DICOM表示状态。LEADTOOLS还可以将Modality LUT应用于图像数据,以进一步简化图像处理和统计计算





DICOM注释对象支持。可以从数据集内存储/获取DICOM注释,并且将它们转换为LEAD注释对象,反之亦


然。为了附加的统计计算和存储为DICOM表示状态,注释也可以被转换为Region of interest。
Cookie剪切工具:可以从一个放射性图像扫描文件中提取出单独的薄片(对于识别一个扫描MRI或CT系列


内的每个薄片很有帮助)。


MRI大脑分析工具:可以用于计算胼胝体(大脑中部的白色物质,就像字母X)和脑球体之间的比率。


LEADTOOLS Multimedia


您可以使用LEADTOOLS Multimedia SDK创建具有专业水准的高品质的多媒体应用程序。该控件中加入了


诸如捕获、播放和编辑等多媒体功能以及对最新的DirectShow过滤和许多多媒体文件格式的支持,即可


以加载和转换多种文件格式(包括WAV、AVI、ASF、WMA、WMV、MPEG-1、OGG等等)。可以编程控制多媒


体处理、压缩,视频和音频输入;还增加了摄像控制(亮度、对比度、缩放等等);以及更灵活的捕获


选项等等更多功能。


特征综述 About Feature


多媒体捕获
能够从WDM、本地DirectShow包括DV、Windows视频捕获设备中捕获视频图像,还可以控制DV设备等。


多媒体播放
能够播放所有DirectShow所支持的文件。可以支持DVD导航,还可以将播放设置保存到文件或二进制流中


等等。


多媒体转换
利用控件包提供的功能,您的用户可以将多媒体文件在AVI,Windows Media content,WAVE和MPEG1 


Audio(MP3)格式之间互相转换,还可以选择DV设备输出等等功能。


多媒体文件格式
支持大部分流行的多媒体格式(AVI、ASF、WMV、WAV、OGG、MPEG-2、MPG)。点击此处可以得到一个所


支持格式的列表。


多媒体压缩
通过可用的DirectShow过滤器压缩多媒体文件(内存中进行)。(Windows Media)


多媒体处理
具有处理AVI、Windows Media content、WAVE和MPEG1Audio(MP3)格式或DirectShow过滤器捕获到的数


据的能力。在电影回放、转换或被捕获时可以使用LEAD Video callback DirectShow过滤器中的200种像


处理功能来处理电影。


DirectShow过滤器
LEADTOOLS Multimedia包含了一个多媒体过滤器包的测试版,这个多媒体过滤器包具有强大的多媒体处


理功能。


产品演示
LEADTOOLS Multimedia具有一些演示程序,可以帮助您开发您的项目。其中有音频、视频检测demo,音


频更换demo,Mediainfo demo等等。


LEADTOOLS Raster Imaging SDK
LEADTOOLS Raster Imaging SDK是为开发者提供的用于创建功能强大的图像应用程序工具;采用


LEADTOOLS的色彩转换、显示、压缩(JPEG、TIFF、CCITT G4 以及LEAD的CMP属性)、图象处理、TWAIN


扫描、特效(超过2000种)、图像格式支持(超过150种图像文件格式)、打印、Internet/intranet 图像


、数据库图像、图像公共对话框和屏幕捕获等特性,使用它,由此为你节省大量的时间与费用。


特征综述 About Feature


文件格式支持
采用工业标准和专有压缩技术,可同时支持150多种图像文件格式以及sub-格式的加载、保存和转换。另


外,采用LEADTOOLS能添加更多的格式支持,例如采用LEADTOOLS PDF插件,即能实现对PDF文件的加载、


保存和转换支持。


压缩支持
支持多种工业标准的压缩技术,包括JPEG、CCITT、LZW (使用于GIF及某些TIFF文件)、ZIPLIB (使用


于PNG文件)、Huffman算法、RLE及紧缩位压缩算法(Packbits)。另外,采用LEADTOOLS JPEG2000 插


件和 LEADTOOLS CMW 插件可添加JPEG2000 及先进的CMW压缩技术。


TWAIN扫描支持
TWAIN 驱动几乎包含在所有的扫描仪及其它图像采集设备中,同时随着最新的发展技术,TWAIN 也是性


能良好与高可靠性驱动的最佳选择。当前LEADTOOLS 的光栅图像产品支持所有包括在TWAIN v1.9 规范中


的功能。


屏幕捕获
具有强大的屏幕捕获功能,能从文件、菜单、窗口、不同形状的屏幕客户区域等捕获资源。屏幕捕获工


具是极其有用的,特别是在文档编辑及需提供其它图像输入方式的时显得更为重要。


数据库支持
同时提供高端或低端的数据库支持,其中包括绑定VB数据控件功能、OLEDB 接口、ODBC 接口以及低端加


载和保存图像到内存的功能。


Internet 支持
提供几种不同级别Internet支持,包括:可封装到CAB文件的对象、能在web服务器端构造的对象、从URL


或存储器装载图像的功能、支持HTTP 和FTP的控件、解析并加载到web服务器端的文件控件,以及用来构


造功能强大、通过TCP/IP发送远程过程调用的客户服务器应用程序控件。


显示与显示效果
对图像如何被显示进行完全地控制,包括缩放、展开、图像显示的区域控制以及超过2000种的特效效果


。LEADTOOLS 甚至包含了一个平铺窗口,这样你能方便地显示图像概要及选用适合最终用户的卷起、平


铺方案。


打印支持
由于能使用与显示图像同样的代码来进行打印,所以打印图像与显示图像同样容易。你能控制图像打印


的尺寸和位置;另外,能结合Windows GDI函数同LEADTOOLS打印一起使用,提供在同一页上打印文本和


多个图像的灵活性。


图像处理
超过200种图象处理功能,分为四个基本类别:过滤、变换、色彩转换及绘图。在LEADTOOLS中的大多数


图像处理功能支持不同着重区域,允许图像的某一部份被处理。通过添加更多用于数字绘图的功能,


LEAD在LEADTOOLS Raster Imaging Pro中提供了包含大量用于数字绘图功能,包括笔刷、形状、纹理的


创建与使用以及更多。


色彩转换
为确保你能把图像从一种格式转换到另一种格式,或是在任何其它显示设备上显示图象,LEADTOOLS 包


含了强大的色彩转换功能。该色彩转换功能包括:支持8 种以上色彩平滑过渡算法、多种调色板选项以


及把图像数据从任何支持的每个像素所占用的位转换到其他支持的每个像素所占用的位功能。支持的数


值有1-8位色或灰度、16位色、24 位色和32 位色。如果你需要12或16位灰度或48与64位色支持。


图像公共对话框
LEADTOOLS 图像公共对话框通过扩展Windows公共对话框以提供具体的图像处理功能,节省了大量的繁琐


编程时间,同时能给最终用户提供一个一致的外观和感觉。这个公共对话框针对图像处理、变换及特效


提供专业的图像公共对话框功能。


LEADTOOLS Vector Imaging Pro


LEADTOOLS Vector Imaging Pro控件包含了创建功能强大的,支持矢量和光栅图像格式的2-D和3-D浏览


器、编辑器、转换器的一切所需要求。通过创建这样的应用程序,您不需要安装或注册一些更昂贵的用


于创建矢量文件的原始程序,您只需添加您所需要的功能。如果您在为矢量成像寻找具有最丰富特色的


软件开发工具包时,LEADTOOLS Vector Imaging Pro也许是您最好的选择。


特征综述 About Feature


支持矢量图像格式
矢量图像可以被加载、保存、转换和输出为光栅图像格式,包括CGM、DGN、DRW、DWF、DXF、EMF、WMF、


PLT、Gerber、PCL、PCT、SVG、VWPG、CMX和SHP。


支持原始对象
支持原始对象,包括圆弧、位图、笔刷、照相机、圆、复制、椭圆、椭圆弧、字体、组、层、线、笔、


饼、弦、Poly Draw、多边形、多边线、Poly Bezier、光栅、长方形、文本、顶点和Clipping对象。


支持浏览和编辑
具有低级和高级函数,可以控制矢量图像的浏览,包括缩放(统一的或围绕任何轴线)、移动镜头、旋


转(围绕任何轴线)和抗失真。矢量图形可以以任何希望的方式编辑,包括添加、修改、删除和将对象


复制到粘贴板或者复制到各个不同的矢量图形中。


支持打印
可以把矢量图形缩小到任何分辨率而不会使图形出现扭曲,这样就可以确保在打印时,图形细节不会丢


失。


支持矢量转换
不需要创建文件的原始程序就可以将矢量文件转换为另一种格式。


支持光栅图像
矢量文件可以被转换为任何分辨率的光栅图像,并且可以被保存为LEADTOOLS Raster Imaging 产品支持


的任何150种图像文件格式。


LEADTOOLS 软件开发工具包也包括了常见的光栅成像特色包括图像处理(转换、过滤、绘制、Region of 


Internet),色彩转换,显示,特效(从2000多种效果中选出的),压缩,图像格式(导入/导出),打


印,Internet/Intranet成像,数据库成像,成像对话框和屏幕捕获。


LEADTOOLS现在还支持Unicode编码
为了向大量的开发人员提供矢量成像功能,控件包提供了5个编程接口:低层次的API、C++类库,以及易


于使用但功能强大的ActiveX、COM、VCL控件。LEADTOOLS Vector Imaging Pro带有示例源代码,适用于


Visual Basic, C/C++, Visual C++ (MFC), C++ Builder, Visual J++, Visual FoxPro, Access, 


Delphi, and VB and JavaScript,并且支持Visual Studio 6.0数据库连接(Oracle, SQL, OLE DB, 


ODBC和JET)。


LEADTOOLS Barcode Module


LEADTOOLS Barcode Module产品允许程序员很容易地在应用软件中加入编码,这样就可以读写Linear


(1D)、DataMatrix (2D)、PDF417(2D)和QR编码的条形码——包括对41种不同子类型的支持。


LEADTOOLS Barcode Modules还加入了LEADTOOLS文档和医学图像工具包。


特征综述 About Feature


Barcode Modules :
设计Linear (1D), DataMatrix (2D), PDF 417 (2D)和QR Code (2D) 条形码样式


可以在任何方向上读出多个条形码。


可以将条形码写入任何超过150种图像文件格式或者写入任何服从窗口的打印机。


利用2D条形码技术,每个条形码符号可用数以千计的字符来编码。


可以从选定目标区域内读出或写入条形码。


可以读出指定颜色的条形码。


可以写入指定颜色的条形码。


使LEADTOOLS的广泛的图像处理技术一体化,以便完全控制用户的条形码识别过程。


下表列出了每个模块的特点:
读取/写入1D Symbols条形码


高级的/标准的


自动条形码类型检测。


从目标区域读出或者写入条形码。


可以从不同的方向读出,比如从左到右,从右到上,对角线方向等等。


读取倾斜的条形码符号。


可以读出多个条形码符号。


可以读出混合的条形码类型,并以x/y的形式来返回报告。


可以写入条形码符号,条形码符号带有大小和位置参数。


可以检验字符处理。


读取/写入2D DataMatrix条形码
包括差错检测码(ECC),能够修复被破坏的条形码符号。


读出或者写入彩色和灰色的条形码。


可以在一个条形码符号中存储多达2218个ASCII字符,还可以把符号串接起来,用多达33225个字符对其


编码。


(读取模块)可以读出条形码,条形码是独立于歪斜失真、方向和取向改变之外的。从目标区域读出条


形码,条形码包含在任何支持的图像文件格式中(支持类型超过150种),并可从扫描仪或者数字照相机


获取。


(写入模块)可以写入任何支持的光栅格式(超过150种)到目标区域,也可以打印到任何支持Windows


的打印机上。


读出/写入2D PDF 417 条形码
可以在一个条形码符号种存储多达1815个ASCII字符。


包括了差错检测码(ECC),能够修复被破坏的条形码符号。


(读取模块)可以读出条形码,条形码是独立于歪斜失真、方向和取向改变之外的。从目标区域读出条


形码,条形码包含于任何支持的图像文件格式中(支持类型超过150种),并可从扫描仪或者数字照相机


获取。


(写入模块)可以写入任何支持的光栅格式(超过150种)到目标区域,也可以打印到任何支持Windows


的打印机上。


读出/写入2D QR Code Modules
可以从ALPHA或者数字文本中创建QR编码的条形码符号。


包含差错检测码(ECC),它可以排除可能出现的被破坏的读出数据。


可以在一个条形码符号中存储多达2335个ASCII字符。


可以使用差错检测码(ECC)来修复被破坏的条形码符号。


可以读出独立于歪斜的、定位的、取向改变和反射之外的条形码。


可以将QR编码条形码符号输出到任何支持的Windows打印机上。


ADTOOLS Document Imaging SDK


LEADTOOLS Document Imaging 是一套可以扫描多种语言文档的COM和VCL控件。它可以执行光学字符识别


,并且将扫描出的文本以四十多种不同的格式输出,包括MS Word,MS Excel,Dbase和WordPerfect等等


。当它用于格式识别和处理应用时,可以加快光符识别处理速度。


注释
本产品具有强大的注释功能,可以添加文本、高亮、附注、音频、椭圆、圆、方形、按钮、线条、箭头


、长方形、多边形、修订(中断信息)、热点、手写字、指针、图像、图章、标尺和超级链接,以上所


有对于文档、色彩和灰度图像都具有多层安全特性。文档成像(Document Imaging)和文档成像套装


(Document Imaging Suite)产品都具有此注释功能。


显示,处理以及内存优化
本产品不仅包含了光栅成像产品的所有显示功能,还拥有被称为双色缩放比例的专业化显示选项,此功


能能够大大的提高成像图像的质量以及屏幕上黑白图像的可读性。


图像获取 – TWAIN捕获
TWAIN驱动是几乎所有扫描器和其它图像获取设备的标准,再加上技术的进一步完善,因此我们的


LEADTOOLS Fast TWAIN产品绝对是您在性能和可靠性方面的最佳选择。目前LEADTOOLS 文档成像


(LEADTOOLS Document Imaging)产品支持TWAIN 1.9规范中的所有功能。


图像增强功能
扫描和传真过程中,噪声和失真不可避免,而它们会导致光符字符识别的精度下降并影响人类阅读。要


克服这些缺点,用户只需使用LEADTOOLS文档成像产品中名为Doc-Clean的功能,此功能可以消除成像图


像中的噪声、边界、线条和装订孔,平滑文本,反转白色文本为黑色文本,还包含可延伸的倾斜图像(


抗扭斜),粗化线条和文本(膨胀)以及腐蚀过厚的文本的其它功能(腐蚀)。


专用存储和压缩功能
Mixed Raster Content(MRC)使用一种技术将图像划分为图像和文本,然后使用一种适合于此类型图像


的压缩技术来获取最高的压缩率以及最佳的图像质量。


光学字符识别(OCR)
光学字符识别功能能够将图像转换成编码形式的字符串,或将其内容以各种文档、数据库以及表单的格


式保存(更多有关内容,请参考LEADTOOLS OCR功能)。文档成像套装(Document Imaging Suite)产品


包含有此功能,如果您使用的是文档成像(Document Imaging)产品,则可以购买一个OCR插件来获取此


功能。


条形码
条形码应用于文档成像领域已有多年的历史,它主要用来帮助识别文档,能够包含文档信息以及用于其


它用途的各种信息。鉴于条形码在文档成像应用程序中的强大功能,LEAD公司推出了多种强大的条形码


扩展功能,您可以购买这些功能来满足您的应用程序的特定需求。


全面成像特征功能
为使LEADTOOLS图像成像系列产品成为用途最广泛和最强大的图像成像产品,LEAD公司开发了全面的(双


色、灰度以及彩色)成像特征功能包括图像处理(变换、过滤、绘制),颜色转换、显示、特效(精选


自两千多种特效),压缩、(导入/导出的)图像格式,打印、国际互联网/企业内部互联网成像、数据


库成像、成像通用对话框以及屏幕抓拍等等。


ImageStone
ImageStone是一套功能强大的C++图像处理库,它可以在多个平台之间移植。   
  功能包括:读写图像文件(JPG,GIF,PNG,TIFF,TGA...),显示,柱状图分析,undo/redo支持,


超过100种预定义的特效等。   
下载地址:http://www.codeguru.com/cpp/g-m/bitmap/viewers/article.php/c12577/
   
  里面有全部的源码和详细的帮助文档加9个例子程序,其中example  008是一个比较完善的图像处理程


序。 
Introduction
ImageStone is a powerful C++ class library for image manipulation. It is written in pure C


++ and is easy to port. Its features include load/save (supports BMP, GIF, JPG, PNG, TIF, 


ICO, TGA, PCX, PSD...), display, histogram, undo/redo, and image transformation with over 


100 predefined effects.


License


ImageStone is free. You can use the code however you want (free or commercial), as long as 


you don't claim it as your own. (If you use it in your product, I hope I could be 


notified.)


Using ImageStone


It's extremely easy. All you need to do is add #include "ImageStone.h" at the beginning of 


your source code. If you are using ImageStone in a MFC project, just add this include line 


at the end of the StdAfx.h file.


The most basic and most important class is FCObjImage. Learn how to use it.


... load/save image file under any OS
// for Windows : ImageStone uses GDI+ to load/save image,
//               Jpg/Png/Gif/Bmp/Tga/Tif be supported
// for Linux : Only Bmp/Tga are supported, but you can set
//             FreeImage handler to support more.
FCObjImage   img ;
img.Load ("test.jpg") ;
if (!img.IsValidImage())
{
assert(false) ;
returnfalse ;
}
// print image's information : width, height, bit per pixel
printf ("image's width : %d",  img.Width()) ;
printf ("image's height : %d", img.Height()) ;
printf ("image's bpp : %d",    img.ColorBits()) ;
// Load/Save function determine image's format by file's ext name
// save image as jpeg file, its quality set 90 (ranges from 1 to 99)
img.Save ("save.jpg", 90) ;
img.Save ("save.png") ;
img.Save ("save.tif") ;
// Another way to set quality
FCImageProperty   prop ;
prop.SetPropertyValue (IMAGE_TAG_JPEG_QUALITY, "90") ;
img.Save ("save.jpg", prop) ;
... load image from memory under any OS
// Load image into memory
char* p = 0 ;
intn = 0 ;
FCOXOHelper::LoadFileToBuffer ("test.jpg", p, n) ;
FCObjImage   img ;
img.Load (p, n, IMG_JPG) ;
delete[] p ;
// this line demonstrates how to determine the image's format by
// the file's ext name
IMAGE_TYPE  t = FCObjImage::GetImageHandleFactory()->
QueryImageFileType("test.jpg");
... load image from DIB stream under any OS
// Load image into memory
char* p = 0 ;
intn = 0 ;
FCOXOHelper::LoadFileToBuffer ("test.bmp", p, n) ;
p += sizeof(BITMAPFILEHEADER) ;
// now p points to a DIB stream
FCObjImage   img ;
img.LoadDIBStream (p, n) ;
delete[] p ;
... load image from a resource under Windows
// Load image from local exe file
FCObjImage   img ;
FCWin32::LoadImageRes (img, MAKEINTRESOURCE(nID), TEXT("JPG"),
IMG_JPG) ;
// Load image from DLL's resource
HMODULE   hDll = LoadLibrary (TEXT("ResDll.dll")) ;
FCWin32::LoadImageRes (img, MAKEINTRESOURCE(nID), TEXT("JPG"),
IMG_JPG, hDll) ;
// Load image from standard BITMAP resource
FCWin32::LoadImageBitmapRes (img, MAKEINTRESOURCE(nID)) ;
... load/save image via FreeImage library
// change to FreeImage library to load/save image
// for more detail, refer to example 005
FCObjImage::SetImageHandleFactory (new FCImageHandleFactory_FreeImage) ;
img.Load ("test.jpg") ;
// change to GDI+ load/save image
FCObjImage::SetImageHandleFactory (new FCImageHandleFactory_Gdiplus) ;
img.Load ("test.jpg") ;
... combine ImageHandleFactory
// use FreeImage to load/save PSD/PCX image
class CMyImageFactory : public FCImageHandleFactory
{
protected:
virtual FCImageHandleBase* CreateImageHandle (IMAGE_TYPE imgType)
{
switch (imgType)
{
case IMG_BMP : returnnew FCImageHandle_Bmp ;
case IMG_TGA : returnnew FCImageHandle_Tga ;
case IMG_JPG : returnnew FCImageHandle_Gdiplus ;
case IMG_GIF : returnnew FCImageHandle_Gdiplus ;
case IMG_TIF : returnnew FCImageHandle_Gdiplus ;
case IMG_PNG : returnnew FCImageHandle_Gdiplus ;
case IMG_PCX : returnnew FCImageHandle_FreeImage ;
case IMG_PSD : returnnew FCImageHandle_FreeImage ;
}
return 0 ;
}
// protected avoid user delete object.
virtual ~CMyImageFactory() {}
};
// use our custom factory to read/write image
FCObjImage::SetImageHandleFactory (new CMyImageFactory) ;
FCObjImage   img ;
img.Load ("test.jpg") ;
... load multi-frame GIF
FCObjMultiFrame   img ;
img.Load ("test.gif") ;
img.GetFrame(0)->Save ("001.jpg") ;
img.GetFrame(1)->Save ("001.jpg") ;
...
... Load a jpeg's EXIF information
FCObjImage        img ;
FCImageProperty   prop ;
img.Load ("test.jpg", &prop) ;
// get camera's ISO speed
std::stringm = prop.QueryPropertyValue (IMAGE_TAG_EXIF_ISOSpeed) ;
// get camera's equip model
std::stringn = prop.QueryPropertyValue (IMAGE_TAG_EquipModel) ;
... draw image object under Windows
FCObjImage   img ;
// capture current screen
RECT         rc = {0, 0, GetSystemMetrics(SM_CXSCREEN),
             GetSystemMetrics(SM_CYSCREEN)} ;
FCWin32::CaptureScreen (img, rc) ;
// Draw image (no stretch) where top-left at (0,0) of hdc
FCWin32::DrawImage (img, hdc, 0, 0) ;
// Stretch image on region of hdc
RECT     rcOnDC = {100, 100, 200, 200} ;
FCWin32::DrawImage (img, hdc, rcOnDC) ;
// Stretch image on central of hdc's region and keep image's aspect
FCWin32::DrawImageAspect (img, hdc, rcOnDC) ;
// Stretch region of image on region of hdc
RECT     rcImg = {20, 20, 50, 50} ;
FCWin32::DrawImage (img, hdc, rcOnDC, rcImg) ;
... copy/paste image to/from Clipboard
FCObjImage   img ;
img.Load ("test.jpg") ;
// copy image to Clipboard
FCWin32::CopyToClipboard (img) ;
// get image on Clipboard
FCWin32::GetClipboardImage (img) ;
... convert between GDI HBITMAP and FCObjImage
// create HBITMAP from FCObjImage object
FCObjImage   img ;
img.Load ("test.jpg") ;
HBITMAP   h = FCWin32::CreateDDBHandle (img) ;
// create FCObjImage object from HBITMAP
FCWin32::CreateImageFromDDB (h, img) ;
... convert between GDI+ bitmap and FCObjImage
// create GDI+ Bitmap from FCObjImage object
FCObjImage   img ;
img.Load ("test.jpg") ;
Gdiplus::Bitmap   * pBmp = FCWin32::GDIPlus_CreateBitmap(img) ;
delete pBmp ;
// create FCObjImage object from GDI+ Bitmap
FCWin32::GDIPlus_LoadBitmap (*pBmp, img) ;
... process image
FCObjImage   img ;
img.Load ("test.jpg") ;
// resize (smooth) image
img.Stretch (nWidth, nHeight) ;
img.Stretch_Smooth (nWidth, nHeight) ;
// Use SinglePixelProcessProc interface to process image.
// There are over 100 pre-implemented effects;
// please refer to class derived from FCInterface_PixelProcess
FCPixelRotate   aCmd (37) ;
img.SinglePixelProcessProc (aCmd) ;
FCPixelBrightness   aCmd (150) ;    // 150%
img.SinglePixelProcessProc (aCmd) ;
FCPixelMosaic   aCmd(5) ;
img.SinglePixelProcessProc (aCmd) ;
FCPixelOilPaint   aCmd (3) ;
img.SinglePixelProcessProc (aCmd) ;
... custom image processing
// our processor : change pixel's RGB value
class CMyPixelProcessor : public FCSinglePixelProcessBase
{
public:
CMyPixelProcessor (int nR, int nG, int nB) : m_R(nR), m_G(nG),
m_B(nB) {}
private:
virtualvoid ProcessPixel (FCObjImage* pImg, int x, int y,
BYTE* pPixel)
{
PCL_B(pPixel) = FClamp0255 (PCL_B(pPixel) + m_B) ;
PCL_G(pPixel) = FClamp0255 (PCL_G(pPixel) + m_G) ;
PCL_R(pPixel) = FClamp0255 (PCL_R(pPixel) + m_R) ;
}
intm_R, m_G, m_B ;
};
// this class has the same function to upper class,
// but implements other class
class CMyImageProcessor : public FCPixelWholeImageBase
{
public:
CMyPixelProcessor (int nR, int nG, int nB) : m_R(nR), m_G(nG),
m_B(nB) {}
private:
virtualvoid ProcessWholeImage (FCObjImage* pImg,
FCObjProgress* pProgress)
{
for (int y=0 ; y < pImg->Height() ; y++)
{
for (int x=0 ; x < pImg->Width() ; x++)
{
BYTE   * p = pImg->GetBits(x,y) ;
PCL_B(p)   = FClamp0255 (PCL_B(p) + m_B) ;
PCL_G(p)   = FClamp0255 (PCL_G(p) + m_G) ;
PCL_R(p)   = FClamp0255 (PCL_R(p) + m_R) ;
}
if (pProgress)
pProgress->SetProgress (100 * y / pImg->Height()) ;
}
}
intm_R, m_G, m_B ;
};
// use our custom processor
FCObjImage   img ;
img.Load ("test.jpg") ;
CMyPixelProcessor   aCmd (20, 20, 20) ;
img.SinglePixelProcessProc (aCmd) ;
CMyImageProcessor   aCmd (20, 20, 20) ;
img.SinglePixelProcessProc (aCmd) ;
... add text on image
FCObjImage   img ;
img.Load ("c://test.jpg") ;
// now we create text layer
FCObjTextLayer   imgT ;
PACK_TextLayer   tp ;
tp.m_bAddShadow   = false ;
tp.m_bAntiAliased = true ;
tp.m_bBold        = true ;
tp.m_bItalic      = true ;
tp.m_crFont       = PCL_RGBA(0,0,255) ;
tp.m_nFontSize    = 128 ;
tp.m_strFace      = "Arial" ;
tp.m_strText      = "Hello" ;
FCWin32::CreateTextLayer_GDIPlus (imgT, tp) ;
// Now we have created a text image. Additionaly,
// we can add some affect to it, such as gradient color
POINT                 pt1={0,0}, pt2={0,50} ;
FCPixelGradientLine   aCmd (pt1, pt2, PCL_RGBA(0,0,255),
FCColor::crWhite()) ;
imgT.SinglePixelProcessProc (aCmd) ;
// blend text layer on image
RECT   rc = {0, 0, imgT.Width(), imgT.Height()} ;
img.AlphaBlend (imgT, rc, rc, 100) ;
GIMP


The GIMP是一个免费的、分布式的图片润饰、图象制作和处理软件,内含几乎所有图象处理所需的功能


,号称Linux下的PhotoShop。GIMP在Linux系统推出时就风靡了许多绘图爱好者的喜爱,它的接口相当轻


巧,但其功能却不输于专业的绘图软件;它提供了各种的影像处理工具、滤镜,还有许多的组件模块,


对于要制作一个又酷又炫的网页按钮或网站Logo来说是一个非常方便好用的绘图软件,因为它也提供了


许多的组件模块,你只要稍加修改一下,便可制作出一个属于你的网页按钮或网站Logo。 如今推出了


For Windows版本,还不赶快试试... 注:需要安装GTK+环境包才能正常安装.


下载地址:http://dlc2.pconline.com.cn/filedown.jsp?dlid=10351&linkid=6361451


CxImage


CxImage类库是一个优秀的图像操作类库。它可以快捷地存取、显示、转换各种图像。有的读者可能说,


有那么多优秀的图形库,如OpenIL,FreeImage,PaintLib等等,它们可谓是功能强大,齐全,没必要用其


它的类库。但我要说,这些类库基本上没有免费的,使用这些类库,你要被这样那样的许可协议所束缚


。在这点上,CxImage类库是完全免费的。另外,在使用上述类库时,你会遇到重重麻烦。因为它们大部


分是平台无关的,且用C语言写成,有的还夹杂着基本的C++ wrapper和成堆德编译选项的声明需要你去


处理。而CxImage类库在这方面做得很好。还有让我最看好的,就是作者完全公开了源代码。相对于那些


封装好的图形库和GDI+来说,这一点使我们可以进一步学习各种编解码技术,而不再浮于各种技术的表


面。如果想下载CxImage,可以http://www.codeproject.com上下载。 CxImage类库的结构:


一个CxImage对象是一个扩展了的位图。作者只是在位图结构上添加了一些起存储信息作用的成员变量。


一个CxImage对象(同时)也是一组层。每个层只有在需要时才会分配相应的缓冲区。CxImage::pDib代


表着背景图像,CxImage::pAlpha代表着透明层,CxImage::pSelection代表着被选中的层,被用来创建


图像处理时让用户感兴趣的区域。在这三个特殊层面的基础上,你可以增加一些额外的层,这些层可以


存储在CxImage::pLayers中。一般说来,层是一个完整的CxImage对象。因此,你可以构造很复杂的嵌套


层。下面是CxImage的一些成员变量:


class CxImage
{
...
protected:
void* pDib;            //包含文件头,调色板等等
BITMAPINFOHEADER head; //标准的文件头(位图)
CXIMAGEINFO info;      //扩展了的信息
BYTE* pSelection;      //用户选中的区域
BYTE* pAlpha;          //alpha通道
CxImage** pLayers;     //通用层
}
typedef struct tagCxImageInfo {
DWORD   dwEffWidth;       //DWORD 扫描线宽
BYTE*   pImage;           //图像位数
void*   pGhost;           //if this is a ghost, pGhost point to the body
DWORD   dwType;           //原图像的格式
char    szLastError[256]; //出错信息
long    nProgress;        //监视循环的次数
long    nEscape;          //跳出标志
long    nBkgndIndex;      //GIF, PNG, MNG格式使用
RGBQUAD nBkgndColor;      //RGB三原色透明度
BYTE    nQuality;         //JPEG格式使用
long    nFrame;           //TIF, GIF, MNG使用 :实际的帧数
long    nNumFrames;       //TIF, GIF, MNG使用 :帧总数
DWORD   dwFrameDelay;     //GIF, MNG使用
long    xDPI;             //水平分辨率
long    yDPI;             //垂直分辨率
RECT    rSelectionBox;    //选中的矩形区
BYTE    nAlphaMax;        //阴影的最大不透明度
bool    bAlphaPaletteEnabled;  //如果调色板中有Alpha通道则为真
bool    bEnabled;         //打开绘图函数
long    xOffset;
long    yOffset;
DWORD   dwEncodeOption;   //一些编码选项
RGBQUAD last_c;           //一些优化选项
BYTE    last_c_index;
bool    last_c_isvalid;
long    nNumLayers;
DWORD   dwFlags;
} CXIMAGEINFO;
要在picture box中显示一个png格式的文件,只需:
CxImage image("myfile.png", CXIMAGE_FORMAT_PNG);
HBITMAP m_bitmap = image.MakeBitmap(m_picture.GetDC()->m_hDC);
m_picture.SetBitmap(m_bitmap);
其它格式则类推。
Examples: how to ...
... convert from a format to another
CxImage  image;
// bmp -> jpg
image.Load("image.bmp", CXIMAGE_FORMAT_BMP);
if (image.IsValid()){
if(!image.IsGrayScale()) image.IncreaseBpp(24);
image.SetJpegQuality(99);
image.Save("image.jpg",CXIMAGE_FORMAT_JPG);
}
// png -> tif
image.Load("image.png", CXIMAGE_FORMAT_PNG);
if (image.IsValid()){
image.Save("image.tif",CXIMAGE_FORMAT_TIF);
}
... load an image resource
//Load the resource IDR_PNG1 from the PNG resource type
CxImage* newImage = new CxImage();
newImage->LoadResource(FindResource(NULL,MAKEINTRESOURCE(IDR_PNG1),
"PNG"),CXIMAGE_FORMAT_PNG);
or//Load the resource IDR_JPG1 from DLL
CxImage* newImage = new CxImage();
HINSTANCE hdll=LoadLibrary("imagelib.dll");
if (hdll){
HRSRC hres=FindResource(hdll,MAKEINTRESOURCE(IDR_JPG1),"JPG");
newImage->LoadResource(hres,CXIMAGE_FORMAT_JPG,hdll);
FreeLibrary(hdll);
}
or//Load a bitmap resource;
HBITMAP bitmap = ::LoadBitmap(AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDB_BITMAP1)));
CxImage *newImage = new CxImage();
newImage->CreateFromHBITMAP(bitmap);
... decode an image from memory
CxImage image((BYTE*)buffer,size,image_type);
orCxMemFile memfile((BYTE*)buffer,size);
CxImage image(&memfile,image_type);
orCxMemFile memfile((BYTE*)buffer,size);
CxImage* image = new CxImage();
image->Decode(&memfile,type);
... encode an image in memory
long size=0;
BYTE* buffer=0;
image.Encode(buffer,size,image_type);
...
free(buffer);
orCxMemFile memfile;
memfile.Open();
image.Encode(&memfile,image_type);
BYTE* buffer = memfile.GetBuffer();
long size = memfile.Size();
...
free(buffer);
... create a multipage TIFF
CxImage *pimage[3];
pimage[0]=&image1;
pimage[1]=&image2;
pimage[2]=&image3;
FILE* hFile;
hFile = fopen("multipage.tif","w+b");
CxImageTIF multiimage;
multiimage.Encode(hFile,pimage,3);
fclose(hFile);
orFILE* hFile;
hFile = fopen("c://multi.tif","w+b");
CxImageTIF image;
image.Load("c://1.tif",CXIMAGE_FORMAT_TIF);
image.Encode(hFile,true);
image.Load("c://2.bmp",CXIMAGE_FORMAT_BMP);
image.Encode(hFile,true);
image.Load("c://3.png",CXIMAGE_FORMAT_PNG);
image.Encode(hFile);
fclose(hFile);
... copy/paste an image
//copy
HANDLE hDIB = image->CopyToHandle();
if (::OpenClipboard(AfxGetApp()->m_pMainWnd->GetSafeHwnd())) {
if(::EmptyClipboard()) {
if (::SetClipboardData(CF_DIB,hDIB) == NULL ) {
AfxMessageBox( "Unable to set Clipboard data" );
}    }    }
CloseClipboard();
//paste
HANDLE hBitmap=NULL;
CxImage *newima = new CxImage();
if (OpenClipboard()) hBitmap=GetClipboardData(CF_DIB);
if (hBitmap) newima->CreateFromHANDLE(hBitmap);
CloseClipboard();
需要大家注意的是:整个CxImage类库非常大。如果你只需要能处理其中的几种格式,你可以在主要的头


文件ximage.h中找到一些开关选项来关闭一些图像库。JPG、PNG、TIFF中的每一个库,都会向最终程序


增加约100KB的内容。而CxImage类库压缩后只有约60KB。所以,你需要谨慎挑选一些你真正需要的类库


。作者提供的示例工程在编译后,你会发现如下一些文件: ·CxImage : cximage.lib - static 


library ·CxImageCrtDll : cximagecrt.dll - DLL not using mfc ·CxImageMfcDll : cximage.dll 


- DLL using mfc ·Demo : demo.exe - program linked with cximage.lib and the C libraries 


·DemoDll : demodll.exe - program linked with cximagecrt.dll 


·j2k,jasper,jbig,jpeg,png,tiff,zlib : static C libraries 构建这些工程需要耗费几分钟的时间


(中间文件可达60MB)。下面则是使用CxImage类库前必须设置的一些参数:


Project Settings
|- C/C++
|   |- Code Generation
|   |   |- Use run-time library : Multithreaded DLL (must be the same for
|   |   |  all the linked libraries)
|   |   |- Struct member alignment : must be the same for all the linked
|   |   |  libraries
|   |- Precompiled headers : not using precompiled headers
|   |- Preprocessor
|       |- Additional Include Directories:  ../cximage
|- Link
|- General
|- Object/library modules: ../png/Debug/png.lib
../jpeg/Debug/jpeg.lib
../zlib/Debug/zlib.lib
../tiff/Debug/tiff.lib
../cximage/Debug/cximage.lib  ..
========

史上超强图像处理开源工具包--ImageMagick

http://blog.csdn.net/codepython/article/details/50956903


ImageMagick简要介绍
ImageMagick是一套功能强大、稳定而且免费的工具集和开发包。
可以用来读、写和图像格式转换,可以处理超过100种图像格式,包括流行的TIFF, JPEG, GIF, PNG, 


PDF以及PhotoCD等格式。
对图片的操作,即可以通过命令行进行,也可以用C/C++、Perl、Java、PHP、Python或Ruby编程来完成



 
运行平台
ImageMagick几乎可以在任何非专有的操作系统上编译,无论是32位还是64位的CPU,包括*nix ,


Windows '95/'98/ME/NT 4.0/2000/XP, Macintosh (MacOS 9 /10), VMS 和 OS/2.
 
使用协议
ImageMagick是免费软件:全部源码开放,可以自由使用,复制,修改,发布。它遵守GPL许可协议。它


可以运行于大多数的操作系统。
 
支持语言
Perl, C, C++, Python, PHP, Ruby, Java;现成的ImageMagick接口有以下几种(PerlMagick, Magick+


+, PythonMagick, imagick for PHP, MagickWand for PHP, RubyMagick, and JMagick)。这可以让程


序自动的动态的修改创建图片。
 
支持图像格式
ImageMagick支持至少90种图片格式: A, ART, AVI, AVS, B, BIE, BMP, BMP2, BMP3, C, CACHE, 


CAPTION, CIN, CIP, CLIP, CLIPBOARD, CMYK, CMYKA, CUR, CUT, DCM, DCX, DNG, DOT, DPS, DPX, 


EMF, EPDF, EPI, EPS, EPS2, EPS3, EPSF, EPSI, EPT, EPT2, EPT3, FAX, FITS, FPX, FRACTAL, G, 


G3, GIF, GIF87, GRADIENT, GRAY, HDF, HISTOGRAM, HTM, HTML, ICB, ICO, ICON, JBG, JBIG, JNG, 


JP2, JPC, JPEG, JPG, JPX, K, LABEL, M, M2V, MAP, MAT, MATTE, MIFF, MNG, MONO, MPC, MPEG, 


MPG, MSL, MTV, MVG, NULL, O, OTB, P7, PAL, PALM, PATTERN, PBM, PCD, PCDS, PCL, PCT, PCX, 


PDB, PDF, PFA, PFB, PGM, PGX, PICON, PICT, PIX, PJPEG, PLASMA, PNG, PNG24, PNG32, PNG8, 


PNM, PPM, PREVIEW, PS, PS2, PS3, PSD, PTIF, PWP, R, RAS, RGB, RGBA, RGBO, RLA, RLE, SCR, 


SCT, SFW, SGI, SHTML, STEGANO, SUN, SVG, SVGZ, TEXT, TGA, TIF, TIFF, TILE, TIM, TTC, TTF, 


TXT, UIL, UYVY, VDA, VICAR, VID, VIFF, VST, WBMP, WMF, WMFWIN32, WMZ, WPG, X, XBM, XC, XCF, 


XPM, XV, XWD, Y, YCbCr, YCbCrA, YUV
由于上述这些特性,让它成为WEB图片处理的首选。
 
主要功能
1. 将图片从一个格式转换到另一个格式。
2. 改变尺寸、旋转、锐化、减色、图片特效
3. 缩略图片的合成图
4. 适于web的背景透明的图片
5. 将一组图片做成gif动画
6. 将几张图片做成一张组合图片
7. 在一个图片上写字或画图形,带文字阴影和边框渲染
8. 给图片加边框或框架
9. 取得一些图片的特性信息
10 给图片添加水印信息
 
安装测试
1) 下载最新的ImageMagick压缩包
 在官网http://www.imagemagick.org/上可以下载各种版本的软件包
2)配置编译并安装
   第一步:解开包文件
   tar zxvf ImageMagick-5.5.6.tar.gz 
   第二步:运行配置文件,生成Makefile文件
   ./configure --prefix==$targetDir
   默认生成的静态库和动态库放置在/usr/local/lib,在C/C++工程中需要用到的头文件放置


在/usr/local/Include,你也可以通过指定$targetDir来将这些文件放置到其他目录中   
   第三步:编译
   make
   第四步:安装到指定的目录   
   make install
3)各种图像格式的支持
  ImageMagick自身仅仅支持有限几种格式的图像,具体支持哪些格式图像,可以在第二步的配置结果可


以看出(见下表),如果你要处理的某种格式图像在本配置结果列表中没有(--with-xxx=no),就需要下


载该格式图像支持软件包  
Delegate Configuration:
BZLIB             --with-bzlib=yes              yes
Autotrace         --with-autotrace=no           no
Dejavu fonts      --with-dejavu-font-dir=default        none
DJVU              --with-djvu=yes               no
DPS               --with-dps=yes                no
FFTW              --with-fftw=yes               no
FlashPIX          --with-fpx=yes                no
FontConfig        --with-fontconfig=no          no
FreeType          --with-freetype=yes           no
GhostPCL          None                          pcl6 (unknown)
GhostXPS          None                          gxps (unknown)
Ghostscript       None                          gs (unknown)
Ghostscript fonts --with-gs-font-dir=default    /usr/share/fonts/default/Type1/
Ghostscript lib   --with-gslib=no               no
Graphviz          --with-gvc=yes                no
JBIG              --with-jbig=yes               no
JPEG v1           --with-jpeg=yes               yes
JPEG-2000         --with-jp2=yes                no
LCMS v1           --with-lcms=yes               no
LCMS v2           --with-lcms2=yes              no
LQR               --with-lqr=yes                no
Magick++          --with-magick-plus-plus=yes   yes
OpenEXR           --with-openexr=yes            no
PERL              --with-perl=no                no
PNG               --with-png=yes                no
RSVG              --with-rsvg=no                no
TIFF              --with-tiff=yes               no
Windows fonts     --with-windows-font-dir=      none
WMF               --with-wmf=yes                no
X11               --with-x=                     no
XML               --with-xml=no         no
ZLIB              --with-zlib=yes               yes
  通常可以免费下载的软件包包括PNG、JPEG、TIFF等
  PNG包下载地点:http://sourceforge.net/projects/libpng/
  JPEG包下载地点:http://freshmeat.net/redir/libjpeg/5665/url_tgz/jpegsrc.v6b.tar.gz
  TIFF包下载地点: http://www.randycullom.com/ImageMagick/tiff-v3.5.5.tar.gz
  
 注意:
 1)如果需要支持这些格式图像,需要先安装这些软件包,再安装ImageMagick,在安装完成后,可以通


过/usr/local/bin/convert -list format来看实际支持的文件格式。
 2)将ImageMagick安装后的函数库所在目录加入到/etc/profile文件中的LD_LIBRARY_PATH环境变量中


,以及/etc/ld.so.conf中同时运行ldconfig,否则一些对ImageMagic的应用可能会出问题。
  
4)功能测试
安装好以后,可以通过运行测试程序来检验安装是否正确,默认情况下,ImageMagick的可执行程序安装


在/usr/local/bin目录下,可以通过运行相应的命令在检查上述功能,具体使用实例可以参见
http://www.charry.org/docs/linux/ImageMagick/ImageMagick.html
   
附录:其他一些图像处理软件包
GIMP(http://www.gimp.org/)是一个基于GNU通用许可的图像处理软件, 它比较适合用于照片修饰, 图像


合成和图像创作. 它可以正常工作于各大操作系统平台,并且有多个国家语言版本。
详细安装和使用体验可以参考 强大的开源图像处理软件——GIMP(http://ukyoi-


d.spaces.live.com/blog/cns!D40A6A1CE1A272AC!311.entry)
Paint.NET(http://www.getpaint.net/) 是一个运行在Windows操作系统上面的图像和相片处理软件。它


包含许多特性,包括具有直观的用户界面,并支持层,无限次的撤销,特效,以及各种各样的强大实用


的插件。Paint.Net的体积很小,下载包才有2M多,但它的功能几乎强大到可比photoshop,只是要运行


Paint.NET需要在电脑里面安装有NET.Framwork。
Blender(http://www.blender.org/)是一个稳定的3D模型创作软件,可用于所有主要的操作系统,基于


GPL许可。你可以利用它创建模型,阴影,动画等交互式3D效果。
Crystal Space(http://www.crystalspace3d.org) 是一个免费的跨平台软件开发工具包,主要用来开发


创建实时的3D图形和一些特别的游戏。主要支持Linux ,Mac OS X和Windows 。
Art of Illusion (http://www.artofillusion.org/)是一个免费开源的3D模型渲染软件. 它使用Java语


言编写, 可以运行在任何Java虚拟机上面。
OpenFX (http://www.openfx.org/)是一个开放源码的三维建模,动画和渲染套件,由Stuart Ferguson


博士创建。其强大的功能集包括一个完整的渲染和raytrace引擎, 在NURBS的支持下,采用基于运动学


的动画,变形,以及广泛的插件API。
Java Image Filters是由 Jhlabs 开发的一组用来处理 Java 图像的类库,提供各种常用的图像处理效


果,例如反转色、扭曲、水波纹、凹凸、黑白效果等等数十种效果
The CImg Library是一个强大的图像处理类库。在代码中使用此类可以导入/导出,处理,和显示图片,


它是一个强大的处理图像的C++工具箱。
FreeImage是一个自由、开源的图形库--FreeImage (支持位图构件―例 如调色板和数据位―的便易访问


;将位图从一种位深度转换到另一种位深度;当有多幅位图页―例如TIFF―时访问位图的不同页;基本


的位图处理,如旋转、翻 转(flipping)和重采样,或点操作,如亮度和对比度调整;Alpha混合与合


成(Compositing and blending);FreeImage不支持:高级图象处理操作,如回卷(Convolution)和


变换(Transform);位图绘制; 矢量图形。)
 
CxImage(http://www.codeproject.com/KB/graphics/cximage.aspx) 


CxImage Structure
CxImage类库是一个优秀的图像操作类库。它可以快捷地存取、显示、转换各种图像。有的读者可能说,


有那么多优秀的图形库,如OpenIL,FreeImage,PaintLib等等,它们可谓是功能强大,齐全,没必要用其


它的类库。但我要说,这些类库基本上没有免费的,使用这些类库,你要被这样那样的许可协议所束缚


。在这点上,CxImage类库是完全免费的。另外,在使用上述类库时,你会遇到重重麻烦。因为它们大部


分是平台无关的,且用C语言写成,有的还夹杂着基本的C++ wrapper和成堆德编译选项的声明需要你去


处理。而CxImage类库在这方面做得很好。还有让我最看好的,就是作者完全公开了源代码。相对于那些


封装好的图形库和GDI+来说,这一点使我们可以进一步学习各种编解码技术,而不再浮于各种技术的表


面。
========

你可能感兴趣的:(.Net,图像处理和识别)