jQuery-使用JavaScript在图像上画一条线

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

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

解决方法:

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

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

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

您不能用物理距离标记线,因为这将取决于显示您的工作的屏幕.最好的办法是确定图像的缩放比例/打印分辨率(以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:线长

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

相关文章

HTML5和CSS3实现3D展示商品信息的代码
利用HTML5中的Canvas绘制笑脸的代码
Html5剪切板功能的实现
如何通过HTML5触摸事件实现移动端简易进度条
Html5移动端获奖无缝滚动动画实现
关于HTML5和CSS3实现机器猫的代码