一切福田,不離方寸,從心而覓,感無不通。

Category Archives: Backend

实战:上亿数据如何秒查?

最近在忙着优化集团公司的一个报表。优化完成后,报表查询速度有从半小时以上(甚至查不出)到秒查的质变。从修改SQL查询语句逻辑到决定创建存储过程实现,花了我3天多的时间,在此总结一下,希望对朋友们有帮助。   数据背景 首先,项目是西门子中国在我司实施部署的MES项目,由于项目是在产线上运作(3 years+),数据累积很大。在项目的数据库中,大概上亿条数据的表有5个以上,千万级数据的表10个以上,百万级数据的表,很多… (历史问题,当初实施无人监管,无人监控数据库这块的性能问题。ps:我刚入职不久…) 不多说,直接贴西门子中国的开发人员在我司开发的SSRS报表中的SQL语句:

这个查询语句,实际上通过我的检测和调查,在B/S系统前端已无法查出结果,半小时,一小时 … 。因为我直接在SQL查询分析器查,半小时都没有结果。 (原因是里面对一张上亿级数据表和3张千万级数据表做全表扫描查询) 不由感慨,西门子中国的素质(或者说责任感)就这样? 下面说说我的分析和走的弯路(思维误区),希望对你也有警醒。   探索和误区 首先相关表的索引,没有建全的,把索引给建上。 索引这步完成后,发现情况还是一样,查询速度几乎没有改善。后来想起相关千万级数据以上的表,都还没有建立表分区。于是考虑建立表分区以及数据复制的方案。 这里有必要说明下:我司报表用的是一个专门的数据库服务器,数据从产线订阅而来。就是常说的“读写分离”。 如果直接在原表上建立表分区,你会发现执行表分区的事物会直接死锁。原因是:表分区操作本身会锁表,产线还在推数据过来,这样很容易“阻塞”,“死锁”。 我想好的方案是:建立一个新表(空表),在新表上建好表分区,然后复制数据过来。 正打算这么干。等等!我好像进入了一个严重的误区! 分析: 原SQL语句和业务需求,是对产线的数据做产品以及序列号的追溯,关键是查询条件里没有有规律的"条件"(如日期、编号),贸然做了表分区,在这里几乎没有意义!反而会降低查询性能! 好险!还是一步一步来,先做SQL语句分析。   一、对原SQL语句的分析 1、查询语句的where条件,有大量@var in … or (@var =") 的片段 2、where条件有like '%’+@var+’%' 3、where条件有 case … end 函数 4、多次连接同一表查询,另外使用本身已嵌套的视图表,是不是必须,是否可替代? 5、SQL语句有*号,视图中也有*号出现   二、优化设计 首先是用存储过程改写,好处是设计灵活。 核心思想是:用一个或多个查询条件(查询条件要求至少输入一个)得到临时表,每个查询条件如果查到集合,就更新这张临时表,最后汇总的时候,只需判断这个临时表是否有值。以此类推,可以建立多个临时表,将查询条件汇总。   这样做目前来看至少两点好处: 1、省去了对变量进行 =@var or (@var=")的判断; 2、抛弃sql拼接,提高代码可读性。   再有就是在书写存储过程,这个过程中要注意: 1、尽量想办法使用临时表扫描替代全表扫描; 2、抛弃in和not in语句,使用exists和not exists替代; 3、和客户确认,模糊查询是否有必要,如没有必要,去掉like语句; 4、注意建立适当的,符合场景的索引; 5、踩死 "*" 号; 6、避免在where条件中对字段进行函数操作; 7、对实时性要求不高的报表,允许脏读(with(nolock))。   三、存储过程 如果想参考优化设计片段的详细内容,请参阅SQL代码:

虽然牺牲了代码的可读性,但创造了性能价值。本人水平有限,还请各位不吝赐教! 最后,将SSRS报表替换成此存储过程后,SQL查询分析器是秒查的。B/S前端用时1~2秒!   四、总结 平常的你是否偶尔会因急于完成任务而书写一堆性能极低的SQL语句呢?写出可靠性能的SQL语句不难,难的是习惯。 本文的优化思想很简单,关键点是避免全表扫描 & 注重SQL语句写法 & 索引,另外,如果你查询的表有可能会在查询时段更新,而实际业务需求允许脏读,可加with(nolock)预防查询被更新事物阻塞。 作者:hangwei 出处:http://www.cnblogs.com/hangwei/ 关于作者:专注于微软平台项目的架构设计与开发、数据库调优等工作。如有问题或建议,请多多赐教!   from:http://www.oschina.net/news/74787/how-the-data-on-the-second-search

龙生   01 Jul 2016
View Details

六个藉藉无名但迅速崛起的Apache大数据项目

如今全球各地的无数企业组织在处理数据集,这些数据集是如此地庞大而复杂,以至于传统的数据处理应用软件再也无法支持经过优化的数据分析和洞察力获取。这是新一批大数据应用软件旨在解决的问题,而Apache软件基金会(ASF)最近将一批值得关注的开源大数据项目升级为Apache顶级项目。这意味着,这些项目将获得积极的开发和强有力的社区支持。 (图片来源:Creative Commons Zero) 大多数人已听说过Apache Spark,这种大数据处理框架拥有内置模块,可用于数据流、SQL、机器学习和图形处理。IBM及其他公司正在往Spark项目投入数十亿美元的开发资金,美国宇航局和SETI研究所在开展合作,利用Spark的机器学习能力,分析数TB的复杂的外太空无线信号,搜寻可能表明存在智能外星生命的模式。 然而,另外几个最近被提升为顶级项目的Apache大数据项目同样值得关注。实际上,其中一些打造的生态系统在活动和开发上可与Spark的生态系统相媲美。本文介绍了你应该知道的几个Apache大数据项目。 下面是六个迅速崛起的项目: Kylin Apache最近宣布,Kylin项目这个脱胎于eBay的开源大数据项目已被提升为顶级项目。Kylin是一个开源分布式分析引擎,旨在提供一种基于Apache Hadoop的SQL接口和多维分析(OLAP),支持极其庞大的数据集。它仍广泛用于eBay和另外几家组织。 Apache Kylin副总裁Luke Han说:“Apache Kylin的孵化之旅已证明了开源治理在Apache软件基金会(ASF)具有的价值,并证明了围绕该项目打造一个开源社区和生态系统的力量。我们的社区在与世界上最庞大的本地开发者社区积极互动,完全依照Apache之道。” 作为一种基于Hadoop的OLAP解决方案,Apache Kylin旨在填补大数据探索与人类使用之间的空白,“让分析员、最终用户、开发人员和数据爱好者能够对庞大数据集执行交互式分析,延迟低于1秒,”据开发人员声称。他们补充道:“Apache Kylin将商业智能(BI)带回給Apache Hadoop,发掘大数据的价值。” Lens Apache最近还宣布,Apache Lens这个开源大数据和分析工具由Apache孵化器提升为顶级项目(TLP)。据宣布声称:“Apache Lens是一种统一分析平台。它为统一视图的分析查询提供了一种最佳执行环境。Apache Lens旨在通过针对多个分层数据存储系统,提供单一的数据视图,从而消除数据分析孤岛。” “通过在数据基础上提供一种联机分析处理(OLAP)模型,Lens将Apach Hadoop和传统数据仓库无缝集成起来,好比是一个整体。它还为在系统中运行的查询提供了查询历史记录和分析统计功能,另外提供了查询生命周期管理。” Apache Lens的副总裁Amareshwari Sriramadasu 说:“在ASF孵化Apache Lens是个神奇的经历。Apache Lens着眼于最终用户,解决了大数据分析领域的一个非常关键的问题。它让业务用户、分析员、数据科学家、开发人员及其他用户能够轻松处理复杂的分析,不需要了解底层的数据布局。” Ignite Apache软件基金会还宣布Apache Ingite成为了一个顶级项目。这个开源项目旨在构建一种内存中数据架构(in-memory data fabric)。 据Apache社区的成员声称:“Apache Ignite是一种高性能、集成、分布式的内存中数据架构,针对大规模数据集可实现实时计算和处理,速度比基于磁盘或闪存的传统技术要快几个数量级。它旨在可以轻松支持成本合理、基于行业标准的硬件上的分布式大规模并行架构中的新旧应用程序。” Brooklyn Apache软件基金会宣布,Apache Brooklyn现在是个顶级项目(TLP),“这标志着该项目的社区和产品已在该基金会的精英管理流程和原则下得到了妥善治理。”Brooklyn是一种应用程序蓝图和管理平台,用于跨多个数据中心集成服务,并集成云端的众多软件。 据Brooklyn宣布声称:“由于现代应用程序由许多组件构成,微服务架构日前受到关注,部署应用程序和已部署应用程序的日常改进成了一个越来越难的问题。Apache Brooklyn的蓝图提供了一种清晰简洁的方式,可以在部署到公共云或私有基础设施之前,明确应用程序、组件、配置以及组件之间的关系。基于策略的管理建立在自主计算理论这个基础上,不断评估运行中的应用程序,并对它进行改动,让应用程序保持顺畅运行,并且针对成本和响应能力等度量指标进行优化。” Brooklyn现用于一些知名企业组织。云服务提供商Canopy和Virtustream已开发了基于Brooklyn的产品。IBM也广泛使用Apache Brooklyn,以便将大量的工作负载从AWS迁移到IBM Softlayer。 Apex 今年4月份,Apache软件基金会将Apex项目提升为顶级项目。它号称是“面向Apache Hadoop生态系统的一种大规模、高吞吐量、低延时、容错、统一的大数据数据流和批量处理平台。”Apex可与Apache Hadoop YARN协同运行,后者是一种适用于Hadoop集群的资源管理平台。 Tajo 最后,Apache Tajo是需要了解的另一个新的大数据项目,这是Apache Hadoop中一个先进的开源数据仓库系统。Apache声称,Tajo为Hadoop部署系统、第三方数据库和商用商业智能工具提供了快速获取更多信息的功能。 很显然,虽然Apache Spark吸引了大量眼球,但它不是Apache提供的唯一引人注目的大数据工具。今年,Apache可能会将更引人注目的大数据项目提升为顶级项目,这些项目将得益于经过优化的开发资源及更多优势。 原文标题:On the Rise: Six Unsung Apache Big Data Projects   from:http://developer.51cto.com/art/201606/513276.htm

龙生   30 Jun 2016
View Details

7 款顶级开源 BI(商务智能)软件和报表工具

在这个信息化时代,每分每秒都产生海量数据。在海量数据中,挖掘出有用的数据,并且能以较人性化、直观的方式展示这些数据,变得尤为重要。本文将介绍 7款顶级开源 BI(商务智能)软件和报表工具,用于商业数据的分析处理,希望对您有所帮助。 BIRT BIRT(Business Intelligence and Reporting Tools) 是由 IBM在 2004年开源的基于 Eclipse 的报表系统,它主要是用在基于Java与J2EE的Web应用程序上。BIRT主要由两部分组成:一个是基于Eclipse的报表设计和一个可以加到你应用服务的运行期组件。BIRT同时也提供一个图形报表制作引擎。 获取地址:http://www.eclipse.org/birt/   Seal Report Seal Report 是一款生产报表和开放数据库看板框架,采用微软.Net框架,C# 编写。主要有以下它特性: 支持动态SQL 查询数据。 支持本地数据透视表,随意的修改表元素, 数据透视表会立即按照新的布置重新计算数据 。 支持通过HTML 5快速生成网页图表。 可生成层级导航及层级报表。 支持定时任务,可编写批处理,定时执行一些数据加载、数据处理、备份等操作。 较低的TCO(总拥有成本)。 提供Web报表服务。 获取地址:https://github.com/ariacom/Seal-Report/archive/master.zip   JasperReports JasperReports是一个采用Java开发的开源报表工具,它可以在Java环境下像其它IDE报表工具一样来制作报表。 JasperReports 支持PDF、HTML、XLS、CSV和XML文件输出格式。JasperReports是当前Java开发者最常用的报表工具。 获取地址:http://community.jaspersoft.com/download   ReportServer ReportServer 是采用 Java 开发的 BI 平台,支持 Linux 、OS X、Windows三大平台,运行在 Apache Tomcat,Wildfly等应用服务器上,允许采用Excel、Word、多维OLAP展示报表信息。 获取地址:https://reportserver.net/en/download/   Pentaho Pentaho是一个以工作 流为核心的、强调面向解决方案而非工具组件的BI套件,整合了多个开源项目,目标是和商业BI相抗衡。它偏向于与业务流程相结合的BI解决方案,侧重于大 中型企业应用。它允许商业分析人员或开发人员创建报表,仪表盘,分析模型,商业规则和 BI 流程。 功能和特点 ◆ 工作流引擎:Shark and JaWE ◆ 数据库:Firebird RDBMS ◆ 集成管理和开发环境:Eclipse ◆ 报表工具:Eclipse BIRT ◆ ETL工具:Enhydra/Kettle ◆ OLAP Server:Mondrian ◆ OLAP展示:JPivot ◆ 数据挖掘组件:Weka ◆ 应用服务器和Portal服务器:JBoss ◆ 单点登陆服务及LDap认证:JOSSO ◆ […]

龙生   30 Jun 2016
View Details

10+ 最佳的 Node.js 教程结合实例

如果你正在找Node.js的学习资料及指南,那么请继续(阅读),我们的教程将会覆盖即时聊天应用、API服务编写、投票问卷应用、人物投票APP、社交授权、 Node.js on Raspberry Pi等等。 以下是Node.js入门的简单介绍,如果你对Node.js略有了解可以直接跳过此部分。 那什么是Node.js呢? Node.js是迄今运用最多的服务端JavaScript运行时环境,使用JavaScript开发跨平台的实时WEB应用。 Node.js基于Google的V8 JavaScript引擎。基于事件驱动,非阻塞的输入输出模型,这也使得其高效而轻量。 Node.js的强大之处在于其能力支持数据密级性的交互应用,因为这类应用的函数围绕着用户事件,数据I/O和数据流的处理。对于JSON的API,Node.js同样显得很神奇,它是单页WEB应用的心脏和灵魂。 Node.js的流行程度可以感觉得到,像eBay、target、City Group、Sony、Uber、LinkedIn、Medium、Netflix等等的大公司都有在他们的web项目中应用。 怎样学习Node.js呢? Node.js的开发者来自全球,他们用Node.js开发复杂交互的,数据密集型的WEB Apps和网站。同时网上有着大量的资源和教程教你怎样构建自己的Node.js应用。 我们不防看看Node.js大神针对Web Apps写的Node.js最佳指南。 我们所覆盖的指南将包括针对初学者的Node.js、中级指南,同时还有教你怎样构建复杂的Node.js项目。 对于完全的Node.js初学者,  在深入挖掘本文章后续提到的学习项目之前,一步步按照airpair.com上面入门指南的要点 或Node.js入门指南 之类的文章学习是不错的选择。Nodeschool.io是另一个比较好的网站,上面有着非常多的资料,可以学习基本的node.js及相关的技术。 通过Express框架和Socket.io构建即时通讯APP 将一个新技术学到一定高度的最好方式就是通过功能性的应用了。在这个指南中,你将学习使用Express框架和Socket.io构建即时通讯应用,这些技术可以使用基于事件的双向通信。在这个指南中,你还将使用JavaScript模板引擎Jade。 我们要介绍的指南由Krasimir Tsonev所撰写,发布在tutsplus.com上面,从node.js的环境搭建,使用Express框架的后端服务,到最后使用Jade模板引擎的前端UI开发,覆盖了所有前端到后端的方方面面。 你可以在后面这个链接中找到这篇指南:  即时通讯(Node.js Tutorial – Real Time Chat) . 使用Swagger创建Restful API 这个精心设计的教程解释了如何使用Swagger来创建Rest API,并且包括了Rest API应该支持的所有操作(CRUD,创建,查询,更新,删除)。这个例子是由来自scotch.io的Samuela Zara提供的,它实现了管理电影集合的Rest API。 Swagger是一个非常强大的框架来描述REST APIs,它提供了交互式的API文档编辑,客户端sdk生成以及发现服务。通过使用Swagger,你所书写的API将更容易被大家所理解并且使用。 在这个教程中,Samuela一开始先教会大家如何安装node.js的Swagger模块,然后介绍了Swagger提供的模拟模式。通过这个模式,API开发者可以先集中精神进行API本身的设计,而不用写一行的代码。当这个API结构被设计完成之后,教程开始带领大家具体实现获取电影,增加/修改电影以及删除电影的操作。 你可以通过Restful API in Node.js using Swagger这个链接来访问该教程。 在 Node.js 中使用 Nodal 建立 API Services 在大多数模块和框架之上,你就不会需要再建立任何简陋的 JavaScript/Node.js 项目。为了多平台(移动端,web,IOT)产品开发,面向服务的架构是关键的,而本教程就将带你更进一步。 在本教程中,Keith Horwood 利用 Nodal 框架在 Node.js 中来创建 API services,并让这一切看起来极其简单。Nodal 是一个可扩展的,以意见为依据的全服务框架,它帮助数据中心加快在 Node.js 基础上的API创建。 在本教程中,你将会在开发 MVC (模型,控制器和视图)之前安装 node.js 环境,安装 Nodal 和 postgreSQL。 你可以在这里找到本教程: 在 Node.js 中使用 Nodal 建立 API Services. Node.js Apps – 使用通行证进行社交认证 社交认证几乎随处可见,因为我们绝大多数人在Facebook […]

龙生   30 Jun 2016
View Details

NASA 美国国家航空航天局开源项目列表

美国宇航局,即 NASA ,将 253 个软件项目开源目前托管在 Gitithub上(https://github.com/nasa),NASA 希望可以通过开源收获更多项目改进的建议,同时NASA也希望用户可以给NASA提交项目,为此专门开通了官方的开源网站 Code NASA 。  Livingstone2 —— 人工智能(AI)软件系统 Livingstone2 是一个可重用的人工智能(AI)软件系统,旨在帮助飞船生命支持系统、化工厂或其他复杂系统在操作强劲以最小的人力监督,即使面对硬件故障或意外事件。 Livingstone2诊断飞船或其他系统的当前状态,并建议命令或修复操作,允许系统继续操作。 JavaGenes —— 遗传算法  JavaGenes 是一个用Java编写的相当通用的进化软件系统。它实现了几个版本的遗传算法,模拟生化和其他搜索技术。JavaGenes 已经用于分子进化,原子力场参数,数字电路,地球观测卫星计划等地方。 Shift —— 文件传输框架 在高端计算环境中,远程文件传输经常需要处理非常大的数据集,而计算资源则分布在不同的组织,需要将这些数据汇总在一起进行进一步分析。本地传输相同的数据在文件系统也经常由管理员来优化资源利用率当新的文件系统在线或存储成为现有文件系统之间的不平衡。 NASA ECHO —— 独立信息管理系统 NASA 在这个 ECHO 工具的研究上也花了很长时间,终于成功地开发出了 IIMS,早期被称之为独立信息管理系统。功能目标包括: ·  提供良好的文档接口和协议,帮助开发者构建并嵌入用户界面工具和服务。 ·  提供信息管理来支持库存、服务元数据和中间件。 ·  提供数据请求路径和跟踪。 ·  支持图形、关键字和 freetext 搜索。 BigView —— 大图像操作工具 BigView 允许在 Linux 桌面上对任意大小的图像进行平移和缩放操作。此外,它可以在实时的环境中工作,多台电脑合作将一个大的形象。使用这个软件,你可以探索——在相对温和的机器上火星轨道器照相机等图像马赛克(92160 x33280像素)。 CFD Utilities CFD Utility 软件库有将近 30 个 Fortran 90 和 77 的子程序组成,同时有将近 100 个基于这些库开发的应用程序。许多实用程序适用于多次拉丝结构化网格和流动的解决方案,但是很多其他可重用的模块在插值等类别,优化、正交、快速搜索和字符操作出现从空气动力学的几十年的软件开发部门和空间技术部门在NASA艾姆斯研究中心。 Trick —— 航天器仿真环境 Trick 仿真环境由美国约翰逊宇航中心研制。Trick 灵活的功能能让用户在航天器所有阶段建立应用程序,包括早期航天器设计与性能评价,飞行软件的开发与测试,飞行器的动态负责分析,以及循环测试中虚拟和硬件的分析。研发 Trick 的主要目的是为了提供一套普遍的仿真能力,使得特定领域的专家能够专注于他们所属领域具体模型的研究,而不是专注于具体仿真功能上,例如工作排序,输入文件处理或者数据记录。 Growler —— 分布式对象和事件架构 Growler 是一个基于 C++ 开发的分布式对象和事件架构。支持 C++ 的对象序列化作为远程方法调用、事件通道和 IDL 接口定义语言的一部分。 Mesh —— […]

龙生   29 Jun 2016
View Details

微信支付错误两个问题的解决:curl出错,错误码:60

如下是运行微信支付测试代码时出错代码:   Warning: curl_setopt() expects parameter 2 to be long, string given in D:\wwwroot\weixinpaytest\pay\WxPay.JsApiPay.php on line 99   Fatal error: Uncaught exception ‘WxPayException‘ with message ‘curl出错,错误码:60‘ in D:\wwwroot\weixinpaytest\lib\WxPay.Api.php:564 Stack trace: #0 D:\wwwroot\weixinpaytest\lib\WxPay.Api.php(62):   WxPayApi::postXmlCurl(‘<xml><appid><![…‘, ‘https://api.mch…‘, false, 6) #1 D:\wwwroot\weixinpaytest\pay\jsapi.php(36):   WxPayApi::unifiedOrder(Object(WxPayUnifiedOrder)) #2 {main} thrown in D:\wwwroot\weixinpaytest\lib\WxPay.Api.php on line 564   第一个问题,这个问题完全是微信团队的问题,给出的example就是错的:   Warning: curl_setopt() expects parameter 2 to be long, string given in D:\wwwroot\weixinpaytest\pay\WxPay.JsApiPay.php on line 99   找到WxPay.JsApiPay.php文件的99行,curl_setopt($ch, CURLOP_TIMEOUT, 30); 微信团队example代码里少了一个“T”,正确代码应该是 curl_setopt($ch, CURLOPT_TIMEOUT, 30);   这样,这一个问题就解决了。   下面说第二个问题:     Fatal error: Uncaught exception ‘WxPayException‘ with message ‘curl出错,错误码:60‘ in […]

龙生   13 Jun 2016
View Details

2016 版 Laravel 系列入门教程(一)

本教程示例代码见:https://github.com/johnlui/Learn-Laravel-5 在任何地方卡住,最快的办法就是去看示例代码。 本文基于 Laravel 5.2 版本,无奈 5.2 的中文文档还没有跟上,大家勉强看一下 5.1 的吧: Laravel 5.1 中文文档: http://www.golaravel.com/laravel/docs/5.1/ http://laravel-china.org/docs/5.1 默认条件 你应该懂得 PHP 网站运行的基础知识,并且有了一个完善的开发环境。跟随本教程走完一遍,你将会得到一个基础的包含登录、后台编辑、前台评论的简单 blog 系统。 Tips 环境要求:PHP 5.5.9+,MySQL 5.1+ 本教程不推荐完全不懂 PHP 与 MVC 编程的人学习,Laravel 的学习曲线不仅仅是陡峭,而且耗时很长,请先做好心理准备。 这不是 “一步一步跟我做” 教程。本教程需要你付出一定的心智去解决一些或大或小的隐藏任务,以达到真正理解 Laravel 运行逻辑的目的。 本宝宝使用 Safari 截图是为了好看,宝宝们在开发时请选择 Chrome 哦~ 开始学习 1. 安装 许多人被拦在了学习 Laravel 的第一步:安装。并不是因为安装有多复杂,而是因为【众所周知的原因】。在此我推荐一个 composer 全量中国镜像:http://pkg.phpcomposer.com/ 。启用 Composer 镜像服务作为本教程的第一项小作业请自行完成哦。 镜像配置完成后,在终端(Terminal 或 CMD)里切换到你想要放置该网站的目录下(如 C:\wwwroot、/Library/WebServer/Documents/、/var/www/html、/etc/nginx/html 等),运行命令:

然后,稍等片刻,当前目录下就会出现一个叫 learnlaravel5 的文件夹,安装完成啦~ 2. 运行 为了尽可能地减缓学习曲线,推荐宝宝们使用 PHP 内置 web 服务器驱动我们的网站。运行以下命令:

我在本地 hosts 中绑定了 fuck.io 到 127.0.0.1(如果你不会或者不想改 hosts,可以直接使用 127.0.0.1 代理我的 fuck.io),这时候访问 http://fuck.io:1024 就是这个样子的: 这时候你可能要问了:为什么本宝宝的页面是一片空白?请使用开发者工具查看网络请求,只要是 200 状态就说明运行成功了,空白是因为这个页面引用了 Google Fonts,你懂的~ 至于为什么选择 1024 […]

龙生   12 Jun 2016
View Details

C#:GDI+图像扭曲

DrawImage 时按照目标形状给定矩形框大小即可,下面是MSDN上的代码: Bitmap myBitmap = new Bitmap("Spiral.png"); Rectangle expansionRectangle = new Rectangle(135, 10, myBitmap.Width, myBitmap.Height); Rectangle compressionRectangle = new Rectangle(300, 10, myBitmap.Width / 2, myBitmap.Height / 2); myGraphics.DrawImage(myBitmap, 10, 10); myGraphics.DrawImage(myBitmap, expansionRectangle); myGraphics.DrawImage(myBitmap, compressionRectangle);       以上图形转换的代码如下,经测试通过,参考了CxImage的源码:     static int ComputePixel(float x, float y, out float x1, out float y1) { double r, nn; if (x == 0 && y == 0) { x1 = x; y1 = y; return 1; } nn = Math.Sqrt(x * x + y * y); r = (Math.Abs(x) > Math.Abs(y)) […]

龙生   08 Jun 2016
View Details

C# :GDI+技术生成复杂型彩色验证码(转载)

该类是生成一个验证码的类,集合了网上大部分的C#关于GDI+的文章进行多次改进,现在已经形成了可在生产环节中使用的验证码。 该验证码加入了背景噪点,背景噪点曲线和直线,背景噪点文字以及扭曲,调暗,模糊等。完全可以实现防识别。 对安全性要求比较高的网站尤其适用。 同时该类还还收集了GDI+的图像处理方面的函数,包括雾化,扭曲,水波,锐化,高斯模糊,画直线,画曲线生成随机颜色,缩放图片,柔化图片,图片黑白化,增加曝光度,RGB滤镜,绘制圆角等功能。

from:http://www.cnblogs.com/Fooo/p/3576800.html

龙生   08 Jun 2016
View Details

C# GDI+绘图高级编程

龙生   08 Jun 2016
View Details
1 194 195 196 282