【问题标题】:Add image to canvas with select option or with upload and draw it使用选择选项或上传将图像添加到画布并绘制它
【发布时间】:2014-09-25 17:37:00
【问题描述】:

你能帮我解决这个问题吗?我正在寻找如何通过上传添加图像或使用选择按钮添加现有图像,然后在图像中绘制并最后将其保存到数据库中,就像图像的规则一样(例如 images/canvas/draw1.jpg 或 . png)

我遵循这两个教程...但我不知道如何完成它

select-diferent-image-for-canvas-background

dynamically-add-image-to-canvas

【问题讨论】:

  • 您对 Stackoverflow 问题的要求太高了。 SO问题应该集中在一个特定的问题上,而不是关于(1)如何上传图像,(2)如何编辑图像,(3)如何将编辑后的图像保存到数据库的广泛问题。如果您对代码有具体问题,那么 SO 将是正确的地方。
  • @markE,嗨,这是真的......对不起,我想我会保留第一个(select-diferent-image-for-canvas-background),因为它是最完整的脚本并且是更接近我需要的...我希望有人修复它...因为我仍然喜欢用户如何在没有线索的情况下询问

标签: javascript html image canvas


【解决方案1】:

此示例允许您的用户将图像从其桌面拖到背景画布上:

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

// dropzone event handlers
var dropzone;
dropzone = document.getElementById("dropzone");
dropzone.addEventListener("dragenter", dragenter, false);
dropzone.addEventListener("dragover", dragover, false);
dropzone.addEventListener("drop", drop, false);

//
function dragenter(e) {
    e.stopPropagation();
    e.preventDefault();
  }
  //

function dragover(e) {
  e.stopPropagation();
  e.preventDefault();
}

//
function drop(e) {
  e.stopPropagation();
  e.preventDefault();

  var dt = e.dataTransfer;
  var files = dt.files;

  handleFiles(files);
}

//
function handleFiles(files) {

    for (var i = 0; i < files.length; i++) {

      // get the next file that the user selected
      var file = files[i];
      var imageType = /image.*/;

      // don't try to process non-images
      if (!file.type.match(imageType)) {
        continue;
      }

      // a seed img element for the FileReader
      var img = document.createElement("img");
      img.classList.add("obj");
      img.file = file;

      // get an image file from the user
      // this uses drag/drop, but you could substitute file-browsing
      var reader = new FileReader();
      reader.onload = (function(aImg) {
        return function(e) {
          aImg.onload = function() {
              // draw the aImg onto the canvas
              bkctx.clearRect(0, 0, canvas.width, canvas.height);
              bkctx.drawImage(aImg, 0, 0);
            }
            // e.target.result is a dataURL for the image
          aImg.src = e.target.result;
        };
      })(img);
      reader.readAsDataURL(file);

    } // end for

  } // end handleFiles
body {
  background-color: ivory;
}
#dropzone {
  border: 1px solid blue;
  position: relative;
  width: 300px;
  height: 300px;
}
canvas {
  border: 1px solid red;
  position: absolute;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<h4>Drag an image from desktop to blue dropzone.</h4>
<div id="dropzone" width=300 height=300>
  <canvas id="bk" width=300 height=300></canvas>
  <canvas id="canvas" width=300 height=300></canvas>
</div>

【讨论】:

  • 谢谢,但我认为威廉马龙的版本更完整......我只需要知道如何在选择输入中选择图像以在画布内部显示所选图像,然后用它绘制那些蜡笔或飞行员……
  • 你问过让用户改变背景——这就是我的回答。如果您想集成 William Malone 的绘图代码,那么这超出了 stackoverflow 问题的范围。如果您对自己的代码有更具体的问题,我建议您尝试自己集成并提出另一个问题...
  • 我向表单询问了如何添加带有上传的图像或带有选择按钮的现有图像,然后在图像中绘制并最后将其保存到数据库中,就像图像的规则一样(例如。 images/canvas/draw1.jpg 或 .png)...你给我拖,但我需要在该图像上绘制的部分并最后保存它...所以我告诉你最完整的脚本是威廉马龙脚本...只是错过了选择输入的选择图像部分然后保存它,但感谢您的支持
  • 我将 2 幅画布完全重叠。拖动的背景图像显示用户拖动到背景画布 (bk) 的内容。我把上面的画布放在那里,供你编写威廉马龙的素描应用程序。执行bkctx.getImageData 以获取背景图像像素,然后在顶部画布上应用 Malone 的技术。但是,为您编写 Malone 解决方案超出了 SO 问题+答案的范围。祝您的项目好运,如果您自己的代码有问题,请回来!
猜你喜欢
  • 1970-01-01
  • 2012-11-29
  • 1970-01-01
  • 1970-01-01
  • 2021-08-30
  • 2017-01-15
  • 2014-04-10
  • 1970-01-01
  • 2014-09-03
相关资源
最近更新 更多