canvas 图形库

/*
* @Author: ocean
* @Date:   2015-04-26 20:08:19
* @Last Modified by:   ocean
* @Last Modified time: 2015-04-26 20:30:08
*/

‘use strict‘;
var canvastools = {

/**********************************圆角矩形************************************************/
        drawRoundRect :    function (cxt, x, y, width, height, radius){
            cxt.save();
            cxt.translate(x, y);
            canvastools.pathRoundRect(cxt, width, height,radius);
            cxt.strokeStyle = "block";
            cxt.stroke();
            cxt.restore();
        },
// 圆角填充矩形
        fillRoundRect :    function (cxt, x, y, width, height, radius, /*optional*/fillColor){

            if(2*radius > width || 2*radius > height){
                return;
            }

            cxt.save();
            cxt.translate(x, y);
            canvastools.pathRoundRect(cxt, width, height,radius);
            cxt.fillStyle = fillColor || "black";
            cxt.fill();
            cxt.restore();
        },
// 圆角描边矩形
        strokeRoundRect : function (cxt, x, y, width, height, radius, /*optional*/lineWidth, /*optional*/strokeColor){

            if(2*radius > width || 2*radius > height){
                return;
            }

            cxt.save();
            cxt.translate(x, y);
            canvastools.pathRoundRect(cxt, width, height,radius);
            cxt.lineWidth = lineWidth || 1;
            cxt.strokeColor = strokeColor || "black";
            cxt.stroke();
            cxt.restore();
        },
// 圆角矩形路径
        pathRoundRect :    function (cxt, width, height, radius){
            cxt.beginPath();
            cxt.arc(width - radius, height - radius, radius, 0, Math.PI / 2);
            cxt.lineTo(radius, height);
            cxt.arc(radius, height - radius, radius, Math.PI / 2, Math.PI);
            cxt.lineTo(0, radius);
            cxt.arc(radius, radius, radius, Math.PI, Math.PI * 3 / 2);
            cxt.lineTo(width - radius, 0);
            cxt.arc(width - radius, radius, radius, Math.PI * 3 / 2, Math.PI * 2);
            cxt.closePath();
        },
/**********************************绘制五角星************************************************/
        drawStar : function (cxt, x, y, R, rot){

            cxt.save();            

            cxt.translate(x, y);
            cxt.rotate(rot/180 * Math.PI);
            cxt.scale(R, R);

            canvastools.starPath(cxt);

            cxt.fillStyle = "#fb3";
            // cxt.strokeStyle = "#fd5";
            // cxt.lineWidth = 3;
            // cxt.lineJoin = "round";

            cxt.fill();
            // cxt.stroke();
            //绘制出在(x, y), 大小位R,旋转rot度的五角星
            //……

            cxt.restore();
        },
// 星星路径
        starPath : function (cxt){
            cxt.beginPath();
            for(var i = 0; i < 5; i++){
                cxt.lineTo(Math.cos((18 + i * 72)/180 * Math.PI),
                              -Math.sin((18 + i * 72)/180 * Math.PI));
                cxt.lineTo(Math.cos((54 + i * 72)/180 * Math.PI) * 0.5,
                              -Math.sin((54 + i * 72)/180 * Math.PI) * 0.5);
            }
            cxt.closePath();
        }

}

HTML

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
    <style type="text/css">
        canvas{
            border: 1px solid #ccc;
        }
    </style>
    <script type="text/javascript" src="js/custom.js"></script>
    </head>

    <body>
        <canvas id="container"></canvas>

        <script type="text/javascript">

        window.onload = function(){

            var canvas = document.querySelector(‘#container‘);

            canvas.width = 1200;
            canvas.height = 800;

            var context = canvas.getContext(‘2d‘);

            // 使用context绘制
            // var skyStyle = context.createLinearGradient(0, 0, 0, canvas.height);
            var skyStyle = context.createRadialGradient(600, 800, 600, 600, 400, 0)
            skyStyle.addColorStop(0.0, ‘black‘);
            skyStyle.addColorStop(1.0, ‘#035‘);
            context.fillStyle = skyStyle;

            context.fillRect(0, 0, canvas.width, canvas.height);
            for(var i = 0; i < 200; i++){
                var r = Math.random() * 5 + 5;
                var x = Math.random() * canvas.width;
                var y = Math.random() * canvas.height * 0.65;
                var a = Math.random() * 360;

                // drawStar(context, x, y, r, r/2.0, a);
                canvastools.drawStar(context, x, y, r, a);
            }

        }

        // function drawStar(cxt, x, y, outerR, innerR, rot){
        //     cxt.beginPath();
        //     for(var i = 0; i < 5; i++){
        //         cxt.lineTo(Math.cos((18 + i * 72 - rot)/180 * Math.PI) * outerR + x,
        //                       -Math.sin((18 + i * 72 - rot)/180 * Math.PI) * outerR + y);
        //         cxt.lineTo(Math.cos((54 + i * 72 - rot)/180 * Math.PI) * innerR + x,
        //                       -Math.sin((54 + i * 72 - rot)/180 * Math.PI) * innerR + y);
        //     }
        //     cxt.closePath();

        //     cxt.fillStyle = "#fb3";
        //     cxt.strokeStyle = "#fd5";
        //     cxt.lineWidth = 3;
        //     cxt.lineJoin = "round";

        //     cxt.fill();
        //     cxt.stroke();
        // }

        // function drawStar(cxt, x, y, R, rot){

        //     cxt.save();            

        //     cxt.translate(x, y);
        //     cxt.rotate(rot/180 * Math.PI);
        //     cxt.scale(R, R);

        //     starPath(cxt);

        //     cxt.fillStyle = "#fb3";
        //     // cxt.strokeStyle = "#fd5";
        //     // cxt.lineWidth = 3;
        //     // cxt.lineJoin = "round";

        //     cxt.fill();
        //     // cxt.stroke();
        //     //绘制出在(x, y), 大小位R,旋转rot度的五角星
        //     //……

        //     cxt.restore();

        // }

        // function starPath(cxt){
        //     cxt.beginPath();
        //     for(var i = 0; i < 5; i++){
        //         cxt.lineTo(Math.cos((18 + i * 72)/180 * Math.PI),
        //                       -Math.sin((18 + i * 72)/180 * Math.PI));
        //         cxt.lineTo(Math.cos((54 + i * 72)/180 * Math.PI) * 0.5,
        //                       -Math.sin((54 + i * 72)/180 * Math.PI) * 0.5);
        //     }
        //     cxt.closePath();
        // }

        </script>

    </body>
</html>
时间: 2024-11-03 20:50:05

canvas 图形库的相关文章

给开发者提供的 35 款 JavaScript 图形图表库

给开发者提供的 35 款 JavaScript 图形图表库 图表是数据图形化的表示,也就是“通过形象的图表来展示数据,比如条形图,折线图,饼图”.几乎每个开发或者项目管理团队都需要图表或者图形来简化 理解,可视化复杂的数据和 web 应用工作流.可视化图表可以帮助开发者更容易理解复杂d数据,提高生产的效率和 web 应用和项目的可靠性. JavaScript 图表和图形库就是一个简单创建图表和图形的工具.现在互联网上有许多五花八门的 JavaScript 图表和图形库,帮助开发者们更好的创建 w

几款开源前端绘图插件推荐

开源前端绘图插件参考: (1)Highcharts(网址:http://www.hcharts.cn) Highcharts是一款纯Javascript图表库, 让开发者很容易在Web网站.Web应用中创建交互性的图表. Highcharts目前支持line , spline, area, areaspline, column, bar, pie, scatter, angular gauges, arearange, areasplinerange, columnrange, bubble, 

【前端vue进阶实战】:从零打造一个流程图、拓扑图项目【Nuxt.js + Element + Vuex】 (一)

本系列教程是用Vue.js + Nuxt.js + Element + Vuex + 开源js绘图库,打造一个属于自己的在线绘图软件,最终效果:topology.le5le.com .如果你觉得好,欢迎给文章和开源库点赞,让我们更有动力去做好! 本系列教程源码地址:Github 一.创建项目框架 1. 使用Nuxt.js向导创建项目 yarn create nuxt-app topology-vue // 注意在后面提示中,上移下移,按空格选中 Element 复制代码 选择Element后,在

Android图形库Skia(一)-基本测试生成PNG图片

基于淺談 Google Skia 圖形處理引擎和Skia Demo Build. Skia是一个跨平台的图形库,目前使用在Android中,同样也有PC版本,这里测试一下以了解其内涵. 1.PC版本测试: # 1.下载 Skia git clone [email protected]:google/skia.git # 2.切换到老版本 参考ubuntu 移植SKIA的日期进行回退 git reset --hard 0e2810be95d3f1aa95c341521d3f514eb9e9ebde

Oracle BIEE整合百度图形库ECharts

BIEE虽然提供了丰富的图形组件,但是并不能满足所有用户的需求,尤其是互联网行业的用户. 这时我们可以考虑引入第三方的图形库,比如本次将要介绍的ECharts (Enterprise Charts 商业产品图表库). ECharts开源来自百度商业前端数据可视化团队,基于html5 Canvas,是一个纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表.创新的拖拽重计算.数据视图.值域漫游等特性大大增强了用户体验,赋予了用户对数据进行挖掘.整合的能力 更多详情请访

开源图形库 c语言-图形图像库 集合[转]

开源图形库 c语言-图形图像库 集合[转] Google三维API O3D O3D 是一个开源的 Web API 用来在浏览器上创建界面丰富的交互式的 3D 应用程序.这是一种基于网页的可控3D标准.此格式期望真正的基于浏览器,独立于操作系统之外,并且支持主流的3D显卡,这样就可以在网页中实现效果逼真 的3D动画.在线演示:http://o3... 更多O3D信息 最新新闻: 谷歌联手Mozilla基金开发3D互联网图像技术发布于 2个月前 绘图引擎 RRDtool 简单的说,RRDtool (

canvas的常见用法

Canvas canvas是一种抽象概念,是2D图形系统中的重要部分,canvas一系列函数最终都是android 2D图形库Skia的一些列封装,对应在SKCanvas.cpp.canvas在系统中的位置如下图所示 可以将canvas看成一个透明的图层,使用canvas之后会产生一个透明图层,然后在这个新图层上画图,画完之后覆盖在屏幕上显示,叠加. 比较经典的例子就是 ` protected void onDraw(Canvas canvas) { super.onDraw(canvas);

知名Html5 Canvas Javascript库对比 (转)

知名Html5 Canvas Javascript库对比 声明: 原文链接:http://www.softr.li/blog/2012/06/20/which-html5-canvas-javascript-library-should-i-use 本译文地址:http://jo2.org/html5-canvas-libary-introduction/ 转载请保留.. <我应该选哪个Canvas库?>译文(以下的“我”是指原作者): 我一直在找一个Html5 canvas库,可以让我创建可

[转载]几个开源Javascript图形库

[转载]原文地址:http://www.cnblogs.com/webgis8/articles/1516639.html 因为Google Map项目的需要,最近一直在寻求相关的Javascript图形库,在尝试用Google Map API提供的javascript接口绘图时发现其效果和效率都不太理想,同时也用过jsgraphics库,也不是很好.又在网上找到了下面几个. mxGraph mxGraph是一款基于web的绘制流程图的javascript库工具,虽然目前还尚未提供注册,不过好在