当前位置:  编程技术>WEB前端
本页文章导读:
    ▪Javascript图像处理——仿射变换      前言上一篇文章,我们讲解了图像金字塔,这篇文章我们来了解仿射变换。 仿射?!任何仿射变换都可以转换成,乘以一个矩阵(线性变化),再加上一个向量(平移变化)。实际上仿射.........
    ▪[Web Chart系列之一]Web端图形绘制SVG,VML, HTML5 Canvas 技术比较      先介绍一下矢量图的概念: 矢量图使用直线和曲线来描述图形,这些图形的元素是一些点、线、矩形、多边形、圆和弧线等等,它们都是通过数学公式计算获得的。例如一幅花的矢量图形实.........
    ▪Less (一种动态样式语言)      Less (一种动态样式语言)。LESS是一种由Alexis Sellier设计的动态层叠样式表语言,受Sass所影响,同时也影响了Sass的新语法:SCSS。 LESS是开源的,其第一个版本由Ruby写成,但在后续的版本当中.........

[1]Javascript图像处理——仿射变换
    来源:    发布时间: 2013-11-06

前言

上一篇文章,我们讲解了图像金字塔,这篇文章我们来了解仿射变换。

 

仿射?!

任何仿射变换都可以转换成,乘以一个矩阵(线性变化),再加上一个向量(平移变化)。

实际上仿射是两幅图片的变换关系。

例如我们可以通过仿射变换对图片进行:缩放、旋转、平移等操作。

 

一个数学问题

在解决仿射问题前,我们来做一个数学题。

如图,对于点(x1, y1),相对于原点旋转一个角度a,那么这个点到哪里了呢?

我们将坐标系变成极坐标系,则点(x1, y1)就变成了(r, β),而旋转后变成(r, α + β)。

转回直角坐标系,则旋转后的点变成了(cos(α + β) * r, sin(α + β) * r)。

然后利用公式:

cos(α+β)=cosαcosβ-sinαsinβ

sin(α+β)=sinαcosβ+cosαsinβ

以及原来点为(cosβ * r, sinβ * r),于是很容易得出新的点为(x1 * cosα - y1 * sinα, x1 * sinaα + y1 * cosα)。

我们可以从中推导出旋转变换公式:

那么平移就相对简单很多了,就相当于加上一个向量(c, d)就行了。

 

获得变换矩阵函数实现

通常我们使用矩阵来表示仿射变换。

其中A是旋转缩放变换,B是平移变换。则结果T满足:

 或者 

即:

var getRotationArray2D = function(__angle, __x, __y){
var sin = Math.sin(__angle) || 0,
cos = Math.cos(__angle) || 1,
x = __x || 0,
y = __y || 0;

return [cos, -sin, -x,
sin, cos, -y
];
};

这样我们就得到了一个仿射变换矩阵。

当然这个实现本身是有一定问题的,因为这个原点被固定在左上角了。

 

仿射变换实现

var warpAffine = function(__src, __rotArray, __dst){
(__src && __rotArray) || error(arguments.callee, IS_UNDEFINED_OR_NULL/* {line} */);
if(__src.type && __src.type === "CV_RGBA"){
var height = __src.row,
width = __src.col,
dst = __dst || new Mat(height, width, CV_RGBA),
sData = new Uint32Array(__src.buffer),
dData = new Uint32Array(dst.buffer);

var i, j, xs, ys, x, y, nowPix;

for(j = 0, nowPix = 0; j < height; j++){
xs = __rotArray[1] * j + __rotArray[2];
ys = __rotArray[4] * j + __rotArray[5];
for(i = 0; i < width; i++, nowPix++, xs += __rotArray[0], ys += __rotArray[3]){

if(xs > 0 && ys > 0 && xs < width && ys < height){

y = ys | 0;
x = xs | 0;

dData[nowPix] = sData[y * width + x];
}else{
dData[nowPix] = 4278190080; //Black
}
}
}
}else{
error(arguments.callee, UNSPPORT_DATA_TYPE/* {line} */);
}
return dst;
};

这个函数先把矩阵数据变成32位形式,操作每个元素就等同于操作每一个像素。

然后遍历所有元素,对对应的点进行赋值。

 

效果

 

 

 

系列目录

Javascript图像处理系列

 

参考资料

Affine Transformations

本文链接


    
[2][Web Chart系列之一]Web端图形绘制SVG,VML, HTML5 Canvas 技术比较
    来源: 互联网  发布时间: 2013-11-06

先介绍一下矢量图的概念:

矢量图使用直线和曲线来描述图形,这些图形的元素是一些点、线、矩形、多边形、圆和弧线等等,它们都是通过数学公式计算获得的。例如一幅花的矢量图形实际上是由线段形成外框轮廓,由外框的颜色以及外框所封闭的颜色决定花显示出的颜色。

SVG,VML, HTML5 Canvas  这三个技术绘制的都是矢量图。 只是由不同的厂商开发出来的。 要达成的效果基本是一样的。

1. VML

全称Vector Markup Language(矢量可标记语言)。 是微软1999年9月附带IE5.0发布的。

浏览器支持:

  Internet Explorer 5++  -- Internet Explorer 8

IE9 以后就支持SVG了。



2. SVG

全称Scalable Vector Graphics(可缩放矢量图形), 是基于xml,用于描述二维矢量图形的一种图形格式。
在 2003 年一月,SVG 1.1 被确立为 W3C 标准。  参与定义 SVG 的组织有:太阳微系统、Adobe、苹果公司、IBM 以及柯达。

浏览器支持:

  Internet Explorer 9、Firefox、Opera、Chrome 以及 Safari 支持内联 SVG。



3.  HTML5 Canvas

HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像。

画布是一个矩形区域,您可以控制其每一像素。

canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。

浏览器支持

最新版本的 Safari、Chrome、Firefox 以及 Opera 支持某些 HTML5 特性。Internet Explorer 9 将支持某些 HTML5 特性。


总结

所以在要在 browser 显示图形, 对于不同的浏览器使用的技术不同。

使用VML绘制图形, 速度是比较慢的。 基本上50个节点加上一些关联页面就会比较钝了。

VML会逐渐的退出。 但是目前IE8 及以下版本的IE浏览器的使用量还是很高。所以必须要兼顾。

HTML5 的标准尚未完全制定, 前途如何尚不可知。浏览器的支持方面也有一些问题。

目前来看,SVG看上去是主流。


不过针对图形绘制方面, 已有很多js library 可以使用, 这些  library已经处理了各浏览器的兼容问题。解决办法就是对于不同的浏览器及版本使用不同的技术绘制。只是对于我们之间使用这些library 来说, 就不再需要关注浏览器兼容的问题了。

比较好的library 有:

raphael , google web toolkit, yui



作者:oscar999 发表于2013-1-15 23:10:09 原文链接
阅读:353 评论:0 查看评论

    
[3]Less (一种动态样式语言)
    来源:    发布时间: 2013-11-06

Less (一种动态样式语言)。

LESS是一种由Alexis Sellier设计的动态层叠样式表语言,受Sass所影响,同时也影响了Sass的新语法:SCSS。 LESS是开源的,其第一个版本由Ruby写成,但在后续的版本当中,Ruby逐渐被替换为JavaScript。受益于JavaScript,LESS可以在客户端上运行(IE6+、Webkit、Firefox),也可以在服务端运行(Node.js、Rhino)。 在语法方面,LESS与CSS较为接近,一个合法的CSS代码段本身也是一段合法的LESS代码段。LESS提供变量、嵌套、混合、操作符、函数等一般编程所需的抽象机制。  

例子:

Windows操作系统需要安装下面的这个工具:

WinLess工具 http://winless.org/

注意:第一次运行,需要添加你的less文件所在的文件夹,后缀名必须全部是小写字母.less。

【在编写less的时候一定要先运行这个软件,保存文件的时候才会自动编译.css文件。】

运行WinLess之后,你就可以在任何编辑器中打开less文件进行编辑,只要保存文件,它就会自动生成对应的一个.css文件(并压缩,包括去掉注释)。

相关网站【推荐阅读】:

LESS官方网站 http://lesscss.org/

LESS中国官网 http://www.lesscss.net/ 【详细使用介绍】

LESS源码(Git) https://github.com/cloudhead/less.js

LESS教程(W3CPlus) http://www.w3cplus.com/css/less

CSS3.LESS(HoneyLess) https://github.com/xiaoqiang/Honey-less

Dreamweaver中Less自动完成 http://istyles.blog.163.com/blog/static/1811003892012630570145/

LESS介绍及其与Sass的差异 http://www.qianduan.net/an-introduction-to-less-and-comparison-to-sass.html

Css预处理器实践之Sass、Less大比拼 http://cued.xunlei.com/log044

Sublime Text 2的Less2Css插件介绍与安装 http://www.qianduan.net/sublime-text-2-less2css-plugin-introduction.html

本文链接


    
最新技术文章:
▪css white-space:nowrap属性用法(可以强制文字不...
▪IE里button设置border:none属性无效解决方法
▪border:none与border:0使用区别
▪html清除浮动的6种方法示例
▪三个不常见的 HTML5 实用新特性简介
▪css代码优化的12个技巧
▪低版本IE正常运行HTML5+CSS3网站的3种解决方案
▪CSS Hack大全-教你如何区分出IE6-IE10、FireFox、Chr...
▪ie6,ie7,ie8完美支持position:fixed的终极解决方案
▪小技巧处理div内容溢出
▪html小技巧之td,div标签里内容不换行
▪纯CSS实现鼠标放上去改变文字内容
▪li中插入img图片间有空隙的解决方案
▪CSS3中Transition属性详解以及示例分享
▪父div高度不能自适应子div高度的解决方案
▪告别AJAX实现无刷新提交表单
▪从零学CSS系列之文本属性
▪HTML 标签
▪CSS3+Js实现响应式导航条
▪CSS3实例分享之多重背景的实现(Multiple background...
▪用css截取字符的几种方法详解(css排版隐藏溢...
▪页面遮罩层,并且阻止页面body滚动。bootstrap...
▪CSS可以做的几个令你叹为观止的实例分享
▪详细分析css float 属性以及position:absolute 的区...
▪IE6/IE7/IE8/IE9中tbody的innerHTML不能赋值的完美解...
▪CSS小例子(只显示下划线的文本框,像文字一...
▪可以给img元素设置背景图
▪不通过JavaScript实现的自动滚动视差效果
▪div+CSS 兼容小摘
▪CSS的inherit与auto使用分析
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3