gpt4 book ai didi

jquery - 使用javascript在图像上画一条线

转载 作者:太空宇宙 更新时间:2023-11-04 13:55:25 24 4
gpt4 key购买 nike

我在 html img 标签中有一张图片。我的要求是,当用户单击图像时,它会标记一个点并在拖动鼠标时画一条线。然后,当用户完成拖动并单击图像时,它应该会显示线条,还会显示线条的尺寸(以毫米/厘米为单位)。即,用户必须在图像上画一条线并显示他画的线的距离/长度(以毫米/厘米为单位)。

如何在 Web 应用程序中实现此功能?谁能帮我实现这个功能?

最佳答案

使用 html5 canvas 元素,将图像设置为 canvas 元素的 css 背景(使绘制线条更容易,因为您不必重新绘制图像)并在 Canvas 上绘制线条:

1) 在 mousedown 上,记录鼠标位置并注册一个 mousemove 处理程序关闭这些起始位置,并注册一个 mouseup 处理程序以删除 mousemove 处理程序。

2) 在mousemove 处理程序中,找到当前鼠标位置与鼠标起始位置之间的偏移量,将此偏移量添加到起始行位置,然后使用此新位置重绘 Canvas 。

你不能用物理距离来标记这条线,因为这取决于显示你作品的屏幕。您能做的最好的事情就是确定图像的比例/打印分辨率(以 dpi 为单位,例如每英寸 300 像素),并据此计算线条的长度。确切的实现取决于您希望如何使用结果。

更新:示例

DEMO JSFIDDLE

HTML

<canvas id="canvas" width="200" height="200">
Your browser doesn't support canvas
</canvas>

CSS

canvas{
background-image: url("image.jpg");
background-position: center;
background-size: 100% 100%;
}

JS

$(document).ready(function(){

var imageDpi = 300;

var can = document.getElementById('canvas');
var ctx = can.getContext('2d');
var startX, startY;

$("canvas").mousedown(function(event){
startX = event.pageX;
startY= event.pageY;

$(this).bind('mousemove', function(e){
drawLine(startX, startY, e.pageX, e.pageY);
});
}).mouseup(function(){
$(this).unbind('mousemove');
});

function drawLine(x, y, stopX, stopY){
ctx.clearRect (0, 0, can.width, can.height);
ctx.beginPath();
ctx.moveTo(x, y);
ctx.lineTo(stopX, stopY);
ctx.closePath();
ctx.stroke();

// calculate length
var pixelLength = Math.sqrt(Math.pow((stopX - x),2) + Math.pow((stopY-y),2));
var physicalLength = pixelLength / imageDpi;
console.log("line length = " + physicalLength +
" inches (image at " + imageDpi + " dpi)");
}
});

更新 2:行长

我更新了示例。它定义图像的物理分辨率并根据该假设计算线的长度。

关于jquery - 使用javascript在图像上画一条线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12477364/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com