javascript - 如何将图像上传到画布并在其上绘制正方形并获取正方形的坐标
问题描述
我正在尝试将图像上传到画布并在其上绘制正方形并获取正方形的坐标以将其发送到后端以进行键识别。
但有些不对劲,我不能在我的图像上画正方形。
这是我使用的javascript:
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var rect = {};
var drag = false;
var imageObj = null;
function init() {
imageObj = new Image();
imageObj.onload = function () { ctx.drawImage(imageObj, 0, 0); };
imageObj.src =
canvas.addEventListener('mousedown', mouseDown, false);
canvas.addEventListener('mouseup', mouseUp, false);
canvas.addEventListener('mousemove', mouseMove, false);
}
function mouseDown(e) {
rect.startX = e.pageX - this.offsetLeft;
rect.startY = e.pageY - this.offsetTop;
drag = true;
}
function mouseUp() { drag = false; }
function mouseMove(e) {
if (drag) {
ctx.clearRect(0, 0, 500, 500);
ctx.drawImage(imageObj, 0, 0);
rect.w = (e.pageX - this.offsetLeft) - rect.startX;
rect.h = (e.pageY - this.offsetTop) - rect.startY;
ctx.strokeStyle = 'red';
ctx.strokeRect(rect.startX, rect.startY, rect.w, rect.h);
}
}
//
init();
</script>
<script type="text/javascript">
document.getElementById('imageLoader').onchange = function(e) {
var img = new Image();
img.onload = draw;
img.onerror = failed;
img.src = URL.createObjectURL(this.files[0]);
};
function draw() {
var canvas = document.getElementById('canvas');
canvas.width = this.width;
canvas.height = this.height;
var ctx = canvas.getContext('2d');
ctx.drawImage(this, 0,0);
}
function failed() {
console.error("The provided file couldn't be loaded as an Image media");
}
和 HTML:
<canvas id="canvas" ></canvas>
<input type="file" id="imageLoader" name="imageLoader"/>
解决方案
您只需要将图像分配给 imageObj。
function draw() {
canvas.width = this.width;
canvas.height = this.height;
ctx.drawImage(this, 0,0);
imageObj = this; //here
}
推荐阅读
- swift - 在集合视图单元格选择上更改表格视图单元格内容
- android - 调整 Android Speech-to-text 识别中的背景噪音敏感度
- javascript - 在 href 属性中插入 javascript 变量
- javascript - 使用主题道具的玩笑/酶测试不起作用
- java - 集合元素映射对于 Map 类型的列的列数错误
- automated-tests - cypress 中的测试是如何组织的
- module - 如何从父文件夹或同级文件夹模块访问模块?
- mysql - 如何在数据存储中存储大量 Python 字典并对其进行过滤/查询?
- windows - 使用 GCC/cmake 生成 DEF 和 .A 文件
- android - 滑动刷新布局下的 RecyclerView 未在嵌套滚动视图中显示