javascript:上传图像文件并将其绘制到 Canvas 中

标签 javascript html canvas image-uploading

我在一个用于绘制图像的网络应用程序中工作。我使用 CANVAS 元素和 javascript 在上面绘制,但我有一个问题:如何从用户的 pc 加载图像并将其绘制在 Canvas 上?我不想保存在服务器上,只保存在网页上!

以下是代码的简化版本(完整代码会太长):

HTML:

Open file: <input type="file" id="fileUpload" accept="image/*" /><br />
<canvas id="canvas" onmousemove="keepLine()" onmouseup="drawLine()" onmousedown="startLine()" width="900" height="600" style="background-color:#ffffff;cursor:default;">
  Please open this website on a browser with javascript and html5 support.
</canvas>

JavaScript:

var x = 0;
var y = 0;
var clicked = false;

var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");

context.strokeStyle = "black";
context.lineCap = "round";

canvas.addEventListener('mousemove', function(e) { getMousePos(canvas, e); }, false);

takePicture.onchange = function (event) {
  var files = event.target.files,
    file;
  if (files && files.length > 0) {
    file = files[0];
    processImage(file);
  }
};

function processImage(file) {
  var reader = new FileReader();
  reader.readAsDataUrl(file)
  reader.onload = function(e) {
    var img = new Image();
    img.onload = function() {
      context.drawImage(img, 100,100)
    }
    img.src = e.target.result;
  }
}

   // functions for drawing (works perfectly well)
function getMousePos(canvas, e) {
  var rect = canvas.getBoundingClientRect();
  x = evt.clientX - rect.left;
  y = evt.clientY - rect.top;
}

function startLine() {
  context.moveTo(x,y);
  context.beginPath();
  clicked = true;
}

function keepLine() {
  if(clicked) {
    context.lineTo(x,y);
    context.stroke();
    context.moveTo(x,y);
  }
}

function drawLine() {
  context.lineTo(x,y);
  context.stroke();
  clicked = false;
}

没有版权

最佳答案

const EL = (sel) => document.querySelector(sel);
const ctx = EL("#canvas").getContext("2d");

function readImage() {
  if (!this.files || !this.files[0]) return;
  
  const FR = new FileReader();
  FR.addEventListener("load", (evt) => {
    const img = new Image();
    img.addEventListener("load", () => {
      ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
      ctx.drawImage(img, 0, 0);
    });
    img.src = evt.target.result;
  });
  FR.readAsDataURL(this.files[0]);
}

EL("#fileUpload").addEventListener("change", readImage);
canvas {display: block;}
<input type='file' id="fileUpload" />
<canvas id="canvas" width="300" height="200"></canvas>

关于javascript:上传图像文件并将其绘制到 Canvas 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22255580/

相关文章:

android - 使 html css 网站在 ios 设备上正常运行

HTML `dialog` 元素 : scroll content independently of background

canvas - 基于 JavaFX FXML 的应用程序中直线和曲线的锐边

javascript - 在 Angular js 中更改导航菜单的类

animation - 使用 canvas.requestFullscreen() 进入全屏时如何调整 Canvas 大小?

javascript - Canvas - Canvas 保存为图像后,橡皮擦在 Canvas 上绘制黑线

javascript - 如何动态加载单选按钮并在 React JS 中使用检查属性?

javascript - 尝试删除不允许的属性时抛出错误

javascript - 通过 JS 中的 mb_strlen 等字符检查长度

javascript - 谷歌饼图在下拉列表中呈现在 div 区域之外