1、能直接复制的直接复制就行
2、框选文字,拖动到QQ,word等编辑框中
3、通过F12打开检查界面,选择对应元素
如果F12打不开,请尝试右键检查
4、如果遇到文字是通过画布canvas()画出来的,可以在源代码中搜索相关文字,找到对应片段,复制下来,通过脚本提取出中文
如果没有python环境,其他编程语言也写这个脚本
DOM是Web前端领域非常重要的组成部分,不仅在处理HTML元素时会用到DOM,图形编程也同样会用到。比如SVG绘图,各种图形都是以DOM节点的形式插入到页面中,这就意味着可以使用DOM方法对图形进行 *** 作。比如有一个 元素,可以直接用jquery增加click事件$('#p1')click(function(){…})"。然而这种DOM处理方法在HTML5的Canvas里不再适用,Canvas使用的是另外一套机制,无论在Canvas上绘制多少图形,Canvas都是一个整体,图形本身实际都是Canvas的一部分,不可单独获取,所以也就无法直接给某个图形增加JavaScript事件。
Canvas的限制
在Canvas里,所有图形都绘制在帧上,绘制方法不会将绘制好的图形元素作为一个返回值输出,js也无法获取到已经绘制好的图形元素。比如:
代码如下:
cvs = documentgetElementById('mycanvas');
ctx = canvasgetContext('2d');
theRect = ctxrect(10, 10, 100, 100);
ctxstroke();
consolelog(theRect); //undefined
这段代码在canvas标签里绘制了一个矩形,首先可以看到绘制图形的rect方法没有返回值。如果打开浏览器的开发者工具,还可以看到canvas标签内部没有增加任何内容,而在js里获取到的canvas元素以及当前的上下文,也都没有任何表示新增图形的内容。
所以,前端常用的dom方法在canvas里是不适用的。比如点击上面Canvas里的矩形,实际点击的是整个Canvas元素。
给Canvas元素绑定事件
由于事件只能达到Canvas元素这一层,所以,如果想进一步深入,识别点击发生在Canvas内部的`哪一个图形上,就需要增加代码来进行处理。基本思路是:给Canvas元素绑定事件,当事件发生时,检查事件对象的位置,然后检查哪些图形覆盖了该位置。比如上面的例子里画过一个矩形,该矩形覆盖x轴10-110、y轴10-110的范围。只要鼠标点击在这个范围里,就可以视为点击了该矩形,也就可以手动触发矩形需要处理的点击事件。思路其实比较简单,但是实现起来还是稍微有点复杂。不仅要考虑这个判断过程的效率,有些地方还需要重新判断事件类型,设置要重新定义一个Canvas内部的捕获和冒泡机制。
首先要做的,是给Canvas元素绑定事件,比如Canvas内部某个图形要绑定点击事件,就需要通过Canvas元素代理该事件:
代码如下:
cvs = documentgetElementById('mycanvas');
cvsaddEventListener('click', function(e){
//
}, false);
接下来需要判断事件对象发生的位置,事件对象e的layerX和layerY属性表示Canvas内部坐标系中的坐标。但是这个属性Opera不支持,Safari也打算移除,所以要做一些兼容写法:
代码如下:
function getEventPosition(ev){
var x, y;
if (evlayerX || evlayerX == 0) {
x = evlayerX;
y = evlayerY;
} else if (evoffsetX || evoffsetX == 0) { // Opera
x = evoffsetX;
y = evoffsetY;
}
return {x: x, y: y};
}
//注:使用上面这个函数,需要给Canvas元素的position设为absolute。
现在有了事件对象的坐标位置,下面就要判断Canvas里的图形,有哪些覆盖了这个坐标。
isPointInPath方法
Canvas的isPointInPath方法可以判断当前上下文的图形是否覆盖了某个坐标,比如:
代码如下:
cvs = documentgetElementById('mycanvas');
ctx = canvasgetContext('2d');
ctxrect(10, 10, 100, 100);
ctxstroke();
ctxisPointInPath(50, 50); //true
ctxisPointInPath(5, 5); //false
接下来增加一个事件判断,就可以判断一个点击事件是否发生在矩形上:
代码如下:
cvsaddEventListener('click', function(e){
p = getEventPosition(e);
if(ctxisPointInPath(px, py)){
//点击了矩形
}
}, false);
以上就是处理Canvas事件的基本方法,但是上面的代码还有局限,由于isPointInPath方法仅判断当前上下文环境中的路径,所以当Canvas里已经绘制了多个图形时,仅能以最后一个图形的上下文环境来判断事件,比如:
代码如下:
本文实例为大家分享了canvas图像截取的具体代码,供大家参考,具体内容如下
<!DOCTYPE
html>
<html>
<head
lang="en">
<meta
charset="UTF-8">
<title>canvas-图像截取</title>
<style>
canvas{
border:
1px
dashed
red;
float:
left;
position:
relative;
}
</style>
</head>
<body>
<div
id="cantox"
style="position:
relative">
<canvas
id="oldcanvas"
width="500px"
height="300px">
</canvas>
<div
id="cliptox"
style="position:
absolute;display:none"></div>
</div>
<button
id
="btnclip"
style="float:
left">截取该区域</button>
<canvas
id="nowcanvas"
width="500px"
height="300px"
>
</canvas>
<script>
//获取div元素
var
cantox
=
documentgetElementById("cantox");
var
cliptox
=
documentgetElementById("cliptox");
var
btnclip
=
documentgetElementById("btnclip");
//获取到canvas元素
var
oldcanvas
=
documentgetElementById("oldcanvas");
var
nowcanvas
=
documentgetElementById("nowcanvas");
//获取canvas中的画图环境
var
oldcontext
=
oldcanvasgetContext('2d');
var
nowcontext
=
nowcanvasgetContext('2d');
var
img
=
new
Image();
imgsrc
=
"/image/liuyifeijpg";
//加载图像到canvas画布中
windowonload
=
function
(){
oldcontextdrawImage(img,0,0,oldcanvaswidth,oldcanvasheight);
}
var
startPoint;//截取图像开始坐标
var
endPoint;//截图图像的结束坐标
var
w;
//截取图像的宽度
var
h;
//截取图像的高度
var
flag
=
false;
//用于判断移动事件事物控制
//鼠标按下事件
cantoxonmousedown
=
function
(e){
flag
=
true;
cliptoxstyledisplay
=
'block';
startPoint
=
windowToCanvas(oldcanvas,
eclientX,
eclientY);
cliptoxstyleleft
=
startPointx+'px';
cliptoxstyletop
=
startPointy+'px';
}
//鼠标移动事件
cantoxonmousemove
=
function
(e){
if(flag){
cliptoxstylebackground
=
'rgba(0,0,0,05)';
endPoint
=
windowToCanvas(oldcanvas,
eclientX,
eclientY);
w
=
endPointx
-
startPointx;
h
=
endPointy
-
startPointy;
cliptoxstylewidth
=
w
+'px';
cliptoxstyleheight
=
h+'px';
}
}
//鼠标释放事件
cantoxonmouseup
=
function
(e){
flag
=
false;
}
//按钮截取事件
btncliponclick
=
function
(){
imgCut(nowcontext,img,oldcanvaswidth,oldcanvasheight,startPointx,startPointy,w,h);
}
/
图像截取函数
context:绘制环境对象
image:图像对象
imgElementW:图像显示的宽度
imgElementH:图像显示的高度
sx:截取图像的开始X坐标
sy:截取图像的开始Y坐标
w:截取图像的宽度
h:截取图像的高度
/
function
imgCut(context,image,imgElementW,imgElementH,sx,sy,w,h){
//清理画布,便于重新绘制
contextclearRect(0,0,imgElementW,imgElementH);
//计算
:比例
=
原图像/显示图像
var
ratioW
=
imagewidth/imgElementW;
var
ratioH
=
imageheight/imgElementH;
//根据截取图像的所占位置及大小计算出在原图所占的位置及大小
//drawImage(图像对象,原图像截取的起始X坐标,原图像截取的起始Y坐标,原图像截取的宽度,原图像截取的高度,
//
绘制图像的起始X坐标,绘制图像的起始Y坐标,绘制图像所需要的宽度,绘制图像所需要的高度);
contextdrawImage(image,ratioWsx,ratioHsy,ratioWw,ratioHh,0,0,w,h);
}
/
坐标转换:将window中的坐标转换到元素盒子中的坐标,并返回(x,y)坐标
element:canvas元素对象
x:鼠标在当前窗口X坐标值
y:鼠标在当前窗口Y坐标值
/
function
windowToCanvas(element,x,y){
//获取当前鼠标在window中的坐标值
//
alert(eventclientX+"-------"+eventclientY);
//获取元素的坐标属性
var
box
=
elementgetBoundingClientRect();
var
bx
=
x
-
boxleft;
var
by
=
y
-
boxtop;
return
{x:bx,y:by};
}
</script>
</body>
</html>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
canvas本身没有绘画能力,它的绘制工作必须在JavaScript的内部完成。
getContext():getContext("2d") 对象是内建的 HTML5 对象,拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。所以获取绘图环境是通过调试canvas对象的getContext()方法。
2017年12月28日
canvas 是一张画布,仅有一个DOM元素,浏览器没有内置多余的API,所有的交互需要开发直接实现。
规则的几何形状,如矩形、圆形等,可通过简单的数学计算获得。
这是用 canvas 做的一个关系网络图,鼠标可以自由拖动节点。这个场景下交互很简单,鼠标点击画布,在事件中获取X,Y坐标,然后计算每一个节点,看是否落在这个节点的半径内。如果是,则标记为选中了。
然而,不规则图形会大大加大计算复杂度,如涉及贝塞尔曲线、旋转等。
可使用 “包围盒” 的方式,将不规则图形简单化
把复杂路径简单化,再次回归到方形、圆形等规则图形上去。
但如果你需要的是一种非常精准无误差的选取方式,那这种包围盒方式就不适用了,下面是两种 canvas 精确选取方式:
需额外新增一张仅用来存信息的canvas(不插入html里面)
当在正常的canvas上绘制图形时,同时在那张隐式的canvas中也绘制一遍,并把图形的索引值作为颜色值来绘制图形
ctxgetImageData(x,y,width,height);
ImageData 对象
R - 红色 (0-255)
G - 绿色 (0-255)
B - 蓝色 (0-255)
A - alpha 通道 (0-255)
重走一遍绘制流程,但不真正的绘制出来(不调用stroke 和 fill )图形),而只调用 isPointInPath()方法判断点是否在图形中,如果在则终止。
MDN - getBoundingClientRect
整理了一些有关canvas的属性( ’ - ’ )
canvas画布
用于绘制图像,本身不具备绘制能力,需要通过脚本来完成绘画,通常这个脚本就是javascript
canvas的默认宽高为300150,不能通过css或行内样式修改它的宽高,它有自己的宽高属性
canvas是一个html元素,通过js来执行绘制
getContext()是用来获取canvas上下文渲染环境和绘画功能的方法,目前只有一个参数:'2d',代表返回一个2d的绘制环境,将来有可能3d,但是目前不支持
它可以做什么?
html5小游戏
绘制,图标,图表,曲线图等等,例如地图上的热力图等等
以及各种酷炫的动画效果都可以通过canvas来完成(可以了解一下WEBGL<>
以上就是关于canvas绘制的文字如何提取全部的内容,包括:canvas绘制的文字如何提取、HTML5中Canvas的事件处理介绍、canvas实现图像截取功能等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)