体育资讯网

您现在的位置是:首页 > 分类14 > 正文

分类14

canvas图片设计源码(canvas 绘制图片)

hacker2022-07-06 17:29:15分类1458
本文目录一览:1、关于html5canvas绘图动画的问题,我要实现把一张图片绘制在canvas中,然后使其动起来,代码如下,

本文目录一览:

关于html5 canvas 绘图动画的问题,我要实现把一张图片绘制在canvas中,然后使其动起来,代码如下,

首先,你这个代码中最后的setInterval("draw()", 100);应该改为setInterval(draw, 100);第一个参数应该是方法名,虽然你那样写也会有效,但强烈建议不要那么写。然后你说你的代码只是在屏幕上闪一下,那么你在画的时候先调一下cxt.beginPath();画结束的时候掉一下cxt.closePaht();试试,这个w3c网站上有讲解,不确定能不能解决你的问题。

补充:测了一下代码,发现问题是出在你的

img.onload=function()

{

cxt.drawImage(img,x,y,80,80);

}

这里,这边不能在img.onload回调方法中调用画图函数,直接画图就好了, cxt.drawImage(img,x,y,80,80);就这样。

使用Canvas画布结合JavaScript绘制以下图形,写出源代码和运行截图

!DOCTYPE html

html

head

/head

body align="center"

    canvas id="drawing" width="400" height="400"A drawing of someing!/canvas

    script type="text/javascript"

        //绘制饼图

        var drawCircle = function(canvasId, data_arr, color_arr){

            var drawing = document.getElementById(canvasId);

            if(drawing.getContext) {

                var context = drawing.getContext('2d');

                var radius = drawing.height/2 -20,//半径

                    ox = radius +20, oy = radius +20;//圆心

                var width = 30, height = 10, //图例宽高

                    posX = ox * 2 +20, posY = 30;//图例位置

                var textX = posX + width + 5, textY = posY + 10;//文本位置

                var startAngle = 0, endAngle = 0;//起始、结束弧度

                context.strokeStyle = 'Purple';

                context.lineWidth = 3;

                context.strokeRect(0, 0, drawing.width, drawing.height);

                for(var i=0, len=data_arr.length; ilen; i++) {

                    //绘制饼图

                    endAngle += data_arr[i] * 2*Math.PI;

                    context.fillStyle = color_arr[i];

                    context.beginPath();

                    context.moveTo(ox, oy);

                    context.arc(ox, oy, radius, startAngle, endAngle, false);

                    context.closePath();

                    context.fill();

                    startAngle = endAngle;

                }

            }

        };

        var init = function(){

            var data_arr = [0.05, 0.25, 0.6, 0.1],

                color_arr = ['#00FF21', '#FFAA00', '#00AABB', '#FF4400'];

            drawCircle('drawing', data_arr, color_arr);

        };

        init();

    /script

/body

/html

HTML5中,如何为图片制作放大镜效果?

制作图片的放大效果我考虑到的方法是将原始图片绘制到canvas上,然后在对canvas进行局部裁剪最后对裁剪的部分进行放大,这样就可以实现放大镜的效果。

这里我给出一个实现这个想法的示例。该示例实际上就是运用HTML5 canvas中对画布进行裁剪与保存画布状态的相关知识实现的。

上面是给出示例的效果图。这是不是你想要的放大镜效果呢?

下面我们来看下示例代码:在这个示例中当你点击图片时图片就会出现上图效果,再一次点击时就变成原始图片了。

!DOCTYPE html

html

head

meta charset="utf-8"

title放大镜/title

!—HTML代码设计:一个简单的canvas元素--

/head

body

div id="result-stub" class="6523-3e14-141b-2d3a well hidden"

canvas id="canvas" width="345" height="345"

p你的浏览器不支持canvas元素/p

/canvas

/div

script

window.onload=function() {

//获取canvas对象以及图片对象

var

canvas = document.getElementById('canvas'),

img = new Image(),

context = null,

dataUrl = null,

//设置一个标记,该标记的作用是控制我们点击canvas时放大镜效果的消失和出现

isMagnified = false,

//init函数只要是在图片加载时绘制出图形

init = function() {

img.onload = function() {

//绘制原始图片

context.drawImage(img, 0, 0);

//将图片信息转化为二进制信息或者URL信息存储在dataUrl中方便后面调用

dataUrl = canvas.toDataURL();

}

img.src = 'fist-pump-baby.jpg';

//设置标记值

isMagnified = false;

},

//magnify函数的作用是绘制具有放大镜效果的图形

magnify = function() {

//保存当前画布的绘制状态即画布绘制原始图片的状态。方便我们在后面恢复到绘制原始图片的状态

context.save();

//因为放大镜的圆圈和把手是通过canvas绘制的这里设置了一些绘制把手和圆圈的样式属性。

context.lineWidth = 10;// 线条宽度

context.shadowColor = '#000';// 阴影的颜色黑色

context.shadowBlur = 15;// 模糊级别为15

context.shadowOffsetX = 5;// 形状与阴影的水平距离5

context.shadowOffsetY = 5;// 形状与阴影的垂直距离5

//保存画布当前状态即我们设置阴影属性后的状态方便后面使用

context.save();

//绘制出放大镜把手的图形

context.beginPath();

context.moveTo(230, 230);

context.lineCap = 'round';

context.lineWidth = 30;

context.lineTo(285, 285);

context.stroke();

//对图片进行裁剪,裁剪出的图形是一个圆形。

context.beginPath();

context.arc(

150,

150,

115,

0,

Math.PI * 2,

true);

context.clip();

//创建一个新的Image对象,这个Image对象的图片资源是前面存储在dataUrl中的图片资源。所以这个Image对象和之前初始化的Image对象是完全一样的。

var magnified = new Image();

magnified.src = dataUrl;

//对Image对象进行放大1.5倍,并进行绘制。注意此时的画布状态时裁剪为一个圆形的状态,所以这里绘制的也仅仅是图片中的一个圆形区域。这里为了绘制出图片中娃娃的脸设置了绘制的图片有一定的偏移量。

context.scale(1.5, 1.5);

context.drawImage(img, -40, -40);

//调用restore()函数将画布状态恢复到绘制把放大镜把手时的状态,即具有阴影属性

context.restore();

//绘制放大镜的圆圈,即绘制刚刚我们裁剪出来图片的边框。这样刚刚裁剪出来的圆形图形就会正好处于放大镜的圆圈中。

context.arc(

150,

150,

115,

0,

Math.PI * 2,

true);

context.stroke();

//重置画布,将画布恢复到绘制元素图片的状态,以方便绘制出放大效果后,再次点击是绘制原始图片。

context.restore();

//设置标记值,实现点击后放大效果消失。

isMagnified = true;

};

//加载初始化代码,即当运行页面时会在页面绘制出一个原始图像

init();

//监听画布的点击事件,当点击页面的图像时会根据标记的值来进行判断是否对画布进行方大处理

$('canvas').click(function() {

if (isMagnified) {

init();//绘制原始图像

}

else {

magnify();//绘制放大的图像

}

});

}

/script

script src="jquery.js"/script

/body

/html

对于这些知识在一个叫秒秒学的教程网站上有相关的学习资料,有兴趣的可以自己去看看,希望对你有帮助。

发表评论

评论列表

  • 只影苍阶(2022-07-07 04:24:41)回复取消回复

    区域。这里为了绘制出图片中娃娃的脸设置了绘制的图片有一定的偏移量。context.scale(1.5, 1.5);context.drawImage(img, -40, -40);//调用r

  • 假欢劣戏(2022-07-07 03:58:33)回复取消回复

    [0.05, 0.25, 0.6, 0.1],                color_arr = ['#00FF21', '#FFAA00', '#00AABB', '#FF4400'];            drawCircle('drawing', data_arr,

  • 夙世箴词(2022-07-07 04:25:25)回复取消回复

    以自己去看看,希望对你有帮助。

  • 世味雾月(2022-07-07 03:17:09)回复取消回复

    ar data_arr = [0.05, 0.25, 0.6, 0.1],                color_arr = ['#00FF21', '#FFAA00', '#00AABB', '#FF4400']