首页 > 编程知识 正文

canvasjs图片(canvas绘制一张图片)

时间:2023-12-19 12:29:24 阅读:317677 作者:CYEM

本文目录一览:

用HTML5中canvas加js代码把下面这张图片绘制出釆

您好,我来为您解答:

本身他是按像素的方式渲染,所以你就1px的空心圆形,太小了,边缘会出现模糊,如果圆画大一点情况就会消失。或者你可以先平移下坐标,让你的中心坐标点是整数,再试看看。

希望我的回答对你有帮助。

为什么我用js创建的image在canvas里显示不出来?

你好,当Image对象的src被设置后,图片才开始被加载到网页缓存数据中,全部加载完成以后Image对象触发onload事件回调。如果直接设置完src属性后立即使用drawImage去读取图片数据,那么图片尚未加载完成(此时是读不到的)。因此你需要给image.onload属性设置一个回调函数,在这个函数里绘制canvas。

HTML5、JS的canvas绘制图片的问题。。

按照你的描述,估计你之前的代码有调用过 ctx.scale 或者 ctx.transform 函数,导致坐标轴被缩放了。

建议找到对应的缩放调用,合理使用 ctx.save 和 ctx.restore 函数,来避免上下文环境污染

javascript 怎么把多幅图片画进canvas中,并且能拖动他们,给他们连线

canvas不可以拖动。你也不可以直接拖动canvas里面的任何元素,包括已经载入的图片(实际上图片已经成为canvas的一部分)。先不说连线,因为我不清楚你要怎样连线。先拿一张图片来说。

思路:canvas不可以拖动,但div可以啊。考虑div和canvas。位置属性设置为absolute,否则容易出错。

注意:将div的z-index值设置大点,保证其在Canvas画面之上。

将div的大小设置成图片的大小。

图片不是在div里面,也没必要。

拖动div,拖动到新位置X1,Y1时,清除canvas的图片:ctx.clearRect(X,Y,W,H);X是上一个位置图片在canvas中的横坐标,Y是上一个位置的纵坐标,W是图片宽度,H是图片高度。

绘制新位置下的图片:ctx.drawImage(img,X,Y);img是一个图片节点。不会用drawImage请百度哈。

【【【具体代码:】】】

div拖动:

var divObj=document.getElementById("cover");

  var moveFlag=false;

    divObj.onmousedown=function(e){

    moveFlag=true;

    var clickEvent=window.event||e;

    var mwidth=clickEvent.clientX-divObj.offsetLeft;

    var mheight=clickEvent.clientY-divObj.offsetTop;

    document.onmousemove=function(e){

      var moveEvent=window.event||e;

      if(moveFlag){

        divObj.style.left=moveEvent.clientX-mwidth+"px";

        divObj.style.top=moveEvent.clientY-mheight+"px";

        divObj.onmouseup=function(){

          moveFlag=false;

        }

      }

    }

  };

来解读下这段代码:首先获取div对象,设置拖拽标志moveFlage,当onmousedown时为true表示可以拖动,当onmouseup时为false表示不能拖动了。

var clickEvent=window.event||e;

      var mwidth=clickEvent.clientX-divObj.offsetLeft;

      var mheight=clickEvent.clientY-divObj.offsetTop;

这三行代码是为了修正光标位置。当点击时,记录下光标在div上的位置。mwidth和mheight表示光标落点相对于div左边和上边的距离。

接下来绘制图片:

首先定义全局变量X和Y,它们是为了实时更新图像的绘制坐标。

var ctx=document.getElementById("myCanvas").getContext("2d");

 var img=document.getElementById("myImg");

  function drawImg(){

    ctx.clearRect(0,0,1000,500);

    ctx.beginPath();

    ctx.drawImage(img,X,Y);

    ctx.closePath();

    ctx.stroke();

  }

  window.onload=function(){

    setInterval(drawImg,1);

  }

获取“画笔”,获取图片对象。这里setInterval循环执行绘制图片的函数,以刷新图片的位置,setInterval的间隔值越小,拖拽起来越“流畅”。

同时别忘了clearRect,当图片移动到下一个位置时,清除上一个位置的图片,参数为Canvas画布的坐标和尺寸。

在拖拽时将修正后的光标坐标传给X、Y:

X=moveEvent.clientX-mwidth;

 Y=moveEvent.clientY-mheight;

最后加上div和图像的活动范围:

if(moveEvent.clientX=mwidth){

  divObj.style.left=0+"px";

  X=0;

}

if(parseInt(divObj.style.left)+divObj.offsetWidth =1000){

  divObj.style.left=1000 - divObj.offsetWidth+"px";

  X=1000 - divObj.offsetWidth;

}

if(moveEvent.clientY=mheight){

  divObj.style.top=0+"px";

  Y=0;

}

if(parseInt(divObj.style.top)+divObj.offsetHeight=500){

       divObj.style.top=500-divObj.offsetHeight+"px";

       Y=500-divObj.offsetHeight;

}

这个就看个人的要求了,注意是要同时限定div和图片的活动范围。1000与500为本例的画布大小,如果是在整个页面里活动就换成innerWidth或innerHeight。

彻底隐藏div看看效果:

最后说下点击事件,这里要注意的是在拖拽的过程中onmousedown与onmouseup二者就构成了一个click过程,但我们不希望在拖拽结束后触发点击事件。

这里有个比较简单的办法,定义一个clickFlag默认为false,当onmousedown时设为true,若进行了onmousemove事件时设为false。

在最后onmouseup时判断clickFlag的值,为true时才触发点击事件。也就是说当你按下鼠标时,只有不发现移动,松开鼠标时才会触发点击事件。

javascript canvas 如何对图片进行绕中心点旋转

给你一个旋转的demo:

!DOCTYPE html

html

body

canvas id="myCanvas" width="300" height="150" style="border:1px solid #d3d3d3;"

Your browser does not support the HTML5 canvas tag.

/canvas

br/

input type="text" id="angle_v" readonly="1"/

script

var c=document.getElementById("myCanvas");

var ctx=c.getContext("2d");

ctx.translate(100,45)

//ctx.rotate(70*Math.PI/180);

//ctx.fillRect(-50,-25,100,50);

var angle=10;

var angle_now = 0;

myRotate()

function myRotate()

{

  ctx.clearRect(-100,-50,200,100);//x2 是为了把原来的图全部抹掉(不留下痕迹)

  ctx.rotate(angle*Math.PI/180);

  ctx.fillRect(-50,-25,100,50);

  angle_now= (angle_now + angle)%360;

  document.getElementById("angle_v").value="当前角度:"+angle_now;

  setTimeout(myRotate,1000);

}

/script

/body

/html

注意:用roate实现旋转,重点在于改变坐标中心点 : ctx.translate(100,45)

    坐标中心点计算公式:x = 左上角x + 宽度/2

                                       y = 左上角y + 高度/2

    然后translate到(x,y)即可,之后调用rotate进行旋转。

    旋转之后填充时注意:ctx.fillRect(-50,-25,100,50);

                                     x = - 宽度/2

                                     y = -高度/2

                                   fillRect(x,y,宽度,高度)

你的例子,代码控制比较看不懂。。。,所以没在基础上整改。

补充一个参考网站(英文的):

(如果有帮助,望采纳,谢谢)

js canvas 旋转图片问题!

所有绘图动作都是在一瞬间完成的,然后立刻就被restore了,当然看不到任何效果咯。如果想让整个过程像动画片一样慢慢展示给你看,那就要用js代码结合延时技术才行。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。