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

原文地址:http://www.cnblogs.com/asxinyu/archive/2013/03/21/2972491.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

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

  1. 开源项目商业模式分析(2) - 持续维护的重要性 - Selenium和WatiN

    该系列第一篇发布后收到不少反馈,包括: 第一篇里说的MonicaHQ不一定盈利 没错,但是问题在于绝大多数开源项目商业数据并没有公开,从而无法判断其具体是否盈利.难得MonicaHQ是公开的,所以才用 ...

  2. 开源社区普遍存在的几个观点之我见(1)开源的价值在哪里和(2)开源是不是商业...

    为什么80%的码农都做不了架构师?>>>    开源的价值在哪里? 开源的动机是人类基因中所蕴含的对分享产生快乐的追求. 你有一个苹果,自己吃,让别人看着.你有没有一种尴尬的感觉? ...

  3. 自由与约束:使用GPL许可证项下开源代码的法律风险

    之前在大厂的项目中和张博士合作开源风险论证,有些启发.经张博士授权转载一篇他的文章,个人认为观点比较全面也比较实用吧.原文如下,欢迎交流,不喜勿喷!多谢! 自由与约束:使用GPL许可证项下开源代码的法 ...

  4. linux 下开源常见监控软件

    linux 下开源监控软件有很多,比较常见的有mrtg,cacti,nagios,ganglia等. 名称 优点 缺点 mrtg 是比较早得监控软件,在3年前用的人还是比较多的, 现在少了,他得优点是 ...

  5. 说说“开源杀死商业开发工具”

    今天在Solidot看到一条很有意思的短文,标题是"开源杀死商业开发工具",其文如下: UNA,源自拉丁形容词"together",是一种协作式的实时源代码开发 ...

  6. 开源的商业意义_为开源项目提供资金具有良好的商业意义

    开源的商业意义 在商业中,投资期望回报. 那么,开源软件的投资回报率是多少? 人们并不总是很清楚,为什么像Divio这样的公司(需要获利的企业)会愿意捐赠给开源社区和项目. 捐钱并不是人们对商业计划的 ...

  7. Linux下开源邮件系统Postfix+Extmail+Extman环境部署

    SMTP.POP3.IPMAP三者说明 简单来说:SMTP是邮件发送协议:POP3和IMAP是邮件接收协议.其中: 1)SMTP 全称是"Simple Mail Transfer Proto ...

  8. Linux下开源打包工具fpm的安装与使用(超详细)

    Linux下开源打包工具fpm的安装与使用 一.fpm概述 二.fpm的安装 1.安装ruby环境 2.安装fpm 三.fpm的使用 1.fpm常用参数 2.举例要求 3.准备目录 4.编写脚本文件 ...

  9. 暑期2020“大咖说开源”之吴雪 | 开源的商业创新

    | 主办方: 中科院软件所.openEuler 社区.开源社 | 编辑:袁睿斌 | 设计:谭嘉露 活动介绍 Overview 开源供应链点亮计划 - 暑期 2020 (https://isrc.isc ...

最新文章

  1. RxSwift UI控件扩展
  2. 【Qt】QWidget类详解(函数篇)
  3. php代码在线base64解码,Base64在线编码解码实现代码 演示与下载
  4. android中文离线api_比林肯法球Linken sphere浏览器更多更新指纹的国产防关联软件-VMLogin中文版浏览器...
  5. 机器学习 | EM 算法原理
  6. WPF之完美捕捉精灵神器 -- HitTest
  7. 【功能强大的国产Mac办公软件】WPS Office for Mac 1.1.0(1454)
  8. Matlab读nc文件
  9. IoT 物联网设备OTA:升级包下载过程详解
  10. 二十三、小程序中的三级下拉框(下拉菜单)
  11. 默写人体的方法有哪些?如何默写好画人体?
  12. 手把手教你Android来去电通话自动录音的方法
  13. 5. Java数组、排序和查找
  14. 【Mac环境】mac在线安装brew时返回443链接被拒绝或超时错误解决方案
  15. shell学习笔记---工具学习
  16. Acrobat Pro DC 教程:了解 Acrobat Pro DC 界面
  17. 空调外机冷媒充注快速密封接头应用案例
  18. 2013北邮网研机试
  19. python画螺旋式正方形
  20. 数据库域id_回答有关域ID保护的问题

热门文章

  1. 配置静态路由下一跳为本地出战接口和IP地址的区别
  2. 如何保证执行异步方法时不会遗漏 await 关键字
  3. Dapr 助力应用架构的可持续性
  4. 如何判断 .NET Core 应用程序是以管理员身份运行
  5. 基于 Azure 的认知服务将文本合成语音
  6. [007] 详解 .NET 程序集
  7. 你知道WPF与WinForms的区别吗?
  8. 接口幂等设计探索实践
  9. 译 | Azure 应用服务中的程序崩溃监控
  10. .Net Core in Docker极简入门(下篇)