javascript - 缩小 Canvas 元素然后获取 imageData

标签 javascript html fabricjs

我需要用户能够绘制一个 Canvas 元素,然后需要将其转换为长度为 784 的数组,以便可以将其输入算法中。该数组应该具有像素阴影强度,我可以使用 ctx.getImageData() 方法找到它。但是,由于用户需要绘制它, Canvas 元素是 280x280 而不是所需的 28x28,这意味着我需要缩小在 280x280 Canvas 上绘制的图像,然后使用 getImageData。

我尝试从 280x280 图像数据数组中获取每 100 个值,但我不确定这是否真的有效,而且我一直在努力绘制结果数组,因此无法验证。

var guess = document.getElementById('guess');
var canvasBig = document.getElementById('canvasBig');
var ctxBig = canvasBig.getContext('2d');
var canvasSmall= document.getElementById('canvasSmall');
var ctxSmall = canvasBig.getContext('2d');

var canvas = new fabric.Canvas('canvasBig', {
   isDrawingMode: true,
});
canvas.freeDrawingBrush.width = 50;

guess.addEventListener('click', function() {
  var imageData = ctx.getImageData(0,0, canvasBig.width, canvasBig.height)
  var resized = []
  for(var i = 0; i < imageData.length; i++){
    if(i % 100 == 0){
      resized.push(imageData.length)
    }
  }
  console.log(imageData)
  ctxSmall.putImageData(imageData, 0, 0)
});

最佳答案

您可以简单地将较大的 Canvas 本身绘制到较小的 Canvas 上(无需使用 getImageData),并在绘制时向下缩放:

ctxSmall.drawImage(canvasBig, 0, 0, 280, 280, 0, 0, 28, 28);

关于javascript - 缩小 Canvas 元素然后获取 imageData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58585216/

相关文章:

javascript - FabricJS SVG 到 Canvas (使用 FileReader)

javascript - FabricJS ReactJS CORS 错误

javascript - 当父选择框更改时,如何删除 Jquery 中的旧选项?

javascript - 方法 POST,状态(已取消)错误消息

php - 通过 PHP 在电子邮件中发送 HTML

php - 无法显示来自数据库的不同图像

javascript - Prop 的条件渲染(无需重新渲染)

javascript - 无法使用 firebug 或 firefox 调试器调试 greasemonkey 脚本

html - CSS - 以元素自身宽度的百分比定位元素

javascript - 使用样式将图像从用户计算机添加到 Canvas