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

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跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329669.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot连接多RabbitMQ源

转自: SpringBoot连接多RabbitMQ源 - 掘金在实际开发中,很多场景需要异步处理,这时就需要用到RabbitMQ,而且随着场景的增多程序可能需要连接多个RabbitMQ。SpringBoot本身提供了默认的配置可以快速配置连接RabbitMQ,但…

满足其中一个条件则可_农村分户好处多,但并非人人都可分户!满足这4个条件才可以申请...

分户,一般指子女成年或者成家后从父母户口里面独立出去,自立一户;也可以是指夫妻离婚后一方将户口独立出去(离婚也可以不分户,变更婚姻状态就行)。简单的说分户是指原本在一个户口本上的人口,现在分出去自成一个户口本…

Synchronized的实现原理(一)

转载自 Synchronized的实现原理(一)synchronized,是Java中用于解决并发情况下数据同步访问的一个很重要的关键字。当我们想要保证一个共享资源在同一时间只会被一个线程访问到时,我们可以在代码中使用synchronized关键字对类或者对…

FOSS历史回顾:三代开源人的故事

现在是2016年,你环顾一下四周,开源早已无处不在了。开源无论是规范、形式、以及面貌都和最初的大相径庭,然而事实上,这也预示着新一代的开源程序员们的崛起。下面我们尝试解释下。 (以下这一段落为作者自谦&#xff09…

Spring中@Autowired、@Qualifier、@Resource的区别

转自: Spring中Autowired、Qualifier、Resource的区别_老周聊架构的博客-CSDN博客_qualifier和resource区别1、AutowiredAutowired 可以单独使用。如果单独使用,它将按类型装配。因此,如果在容器中声明了多个相同类型的bean,则会…

map分组后取前10个_海关数据 | 图解前10个月外贸

*内容转载自微信公众号:海关发布RECOMMEND【 推荐阅读 】海关数据 | 图解前三季度我国外贸海关数据 | 图解8月外贸海关数据 | 一图看懂前7个月外贸海关数据 | 图解上半年度外贸增3.9%声明本微信订阅号不以商业营利为目的,不排除部分文字内容或图片转载自…

回顾build 2016:你好,这是微软迄今最好的Windows开发平台

按:本文作者陈计节,ThoughtWorks 高级咨询师。多年的跨平台 .NET 开发者,全栈工程师,技术布道师。擅长互联网应用程序的设计、开发和运维等工作。 在最近的开发者大会(Build 2016)上,微软面向开…

深入理解多线程(二)—— Java的对象模型

转载自 深入理解多线程(二)—— Java的对象模型上一篇文章中简单介绍过synchronized关键字的方式,其中,同步代码块使用monitorenter和monitorexit两个指令实现,同步方法使用ACC_SYNCHRONIZED标记符实现。后面几篇文章会…

8.1-CPU结构(学习笔记)

【README】 本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐; 【1】CPU结构 Cpu的首要功能就是解释指令;功能列表如下: 1) 取指令:从内存中读取…

生物信息 python 书籍_用python做生物信息数据分析(1-环境准备)

写在前面四五年前,接触生物信息的时候,阴差阳错,我选择用perl。事实上,直到嫌我,我还是认为我当初的选择,完全正确!。在做一些小文本的快速处理上,perl在我看来,从来最优…

8.2-指令周期(学习笔记)

【README】 本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐; 【1】指令周期 【1.1】指令周期概述 1)指令周期:取出并执行一条指令所需的全部时间&#xff1…

深入理解多线程(三)—— Java的对象头

转载自 深入理解多线程(三)—— Java的对象头上一篇文章中我们从HotSpot的源码入手,介绍了Java的对象模型。这一篇文章在上一篇文章的基础上再来介绍一下Java的对象头。主要介绍一下对象头的作用,结构以及他和锁的关系。 Java对象…

python tkinter 背景色改变不了_python - Tkinter背景颜色问题 - 堆栈内存溢出

我有一个脚本,其中包含Tkinter模块,我想每隔3分钟更改一次背景颜色,例如绿色3分钟,然后橙色,然后红色。 我有显示绿色的代码,但无法更改它。当我在代码中创建函数时,会遇到一些不同的错误&#…

回顾微软近年来对于Linux和开源的策略

2014年十月,在旧金山举办的一场活动中,微软的CEO Satya Nadella向公众表示,微软“爱Linux”。作为昔日的竞争对手,微软对Linux的态度逐渐从敌对转变为合作。自那次发言以来,微软在开源方面频频重拳出击,似乎…

深入理解多线程(四)—— Moniter的实现原理

转载自 深入理解多线程(四)—— Moniter的实现原理本文是《深入理解多线程系列文章》的第四篇。点击查看原文,阅读该系列所有文章。 在深入理解多线程(一)——Synchronized的实现原理中介绍过关于Synchronize的实现原理…

(转)Spring Boot通过ImportBeanDefinitionRegistrar动态注入Bean

转自: Spring Boot通过ImportBeanDefinitionRegistrar动态注入Bean - 掘金在阅读SpringBoot源码时,看到SpringBoot中大量使用ImportBeanDefinitionRegistrar来实现Bean的动态注入。它是Spring中一个强大的扩展接口。本篇文章来https://juejin.cn/post/6…

通过图书编号查询python_Python图书接口调用代码实例

1.[代码][Python]代码#!/usr/bin/python# -*- coding: utf-8 -*-import json, urllibfrom urllib import urlencode#----------------------------------# 图书电商数据调用示例代码 - 聚合数据# 在线接口文档:http://www.juhe.cn/docs/50#-------------…

深入理解多线程(五)—— Java虚拟机的锁优化技术

转载自 深入理解多线程(五)—— Java虚拟机的锁优化技术本文是《深入理解多线程》的第五篇文章,前面几篇文章中我们从synchronized的实现原理开始,一直介绍到了Monitor的实现原理。这一篇在前几篇的基础上,深入介绍一下…

Visual Studio Code 1.0正式发布

Visual Studio Code 是一个运行于 OS X,Windows 和 Linux 之上的,针对于编写现代 web 和云应用的跨平台编辑器。 这标志着 Microsoft 第一次向开发者们提供了一款真正的跨平台编辑器。虽然完整版的 Visual Studio 仍然是只能运行在 Windows 之上&#xf…

springboot使用ImportBeanDefinitionRegistrar 动态注册bean

【README】 1.采用 ImportBeanDefinitionRegistrar 动态注册bean,应用场景有: 如 一个后端服务需要用到多个 rabbitmq集群客户端,kafka客户端;这时就需要手动注册多个同类型的bean,但不同beanName,并用 …