将图像从网页的 html 部分拖放到画布上后如何访问图像数据?

2023-12-02

这是一个后续问题如何将文本和图像拖放到画布上? (火狐41.0.1)

我根本不知道如何访问我放到画布上的图像的图像数据。我尝试过类似的事情data = event.dataTransfer.getData("image"),但这一切都不起作用。

function addDragNDropToCanvas() {
    document.getElementById('canvas').addEventListener("dragover", function(event) { event.preventDefault();}, false);
    //handle the drop
    document.getElementById('canvas').addEventListener("drop", function(event) {
        event.preventDefault();
        console.log('something is dropped on the object with id: ' + event.target.id);
        // var directData=event.dataTransfer.getData("image");
        console.log(event);
        }, false);

 }

掉落事件数据中肯定包含图像数据吗?不是吗??? (该图像没有自己的 id 属性。)


您的用户可能会执行以下两种拖动中的一种(或两种):

  • 将网页中的 img 元素拖动到画布上,或者
  • 将图像文件从本地驱动器拖到画布上。

如果图像是从网页中拖动的:

  1. 听听dragover, drop,以及可选的dragenter events.
  2. 处理所有 3 个事件时,告诉浏览器您正在处理该事件event.preventDefault以及可选的event.stopPropagation.
  3. In the drop处理程序,获取event.dataTransfer.getData('text/plain') which fetches the已删除图像的 .src`。
  4. 创建一个新的Image()对象使用.src and drawImage到画布上。

如果图像是从本地驱动器拖动的:

1 和 2. 监听并处理与网页代码中相同的事件。

  1. 获取用户放置的本地图像文件event.dataTransfer.files.

  2. 创建一个FileReader并读取每个图像文件。这FileReader.readAsDataURL方法将返回一个图像 URL,您可以将其用作.src对于图像对象。

  3. drawImage将每个新图像添加到画布上。

这是允许两者的示例代码:

    window.onload=function(){

        // canvas related vars
        var canvas=document.getElementById("canvas");
        var ctx=canvas.getContext("2d");

        // dropZone event handlers
        var dropZone=document.getElementById("canvas");
        dropZone.addEventListener("dragenter", handleDragEnter, false);
        dropZone.addEventListener("dragover", handleDragOver, false);
        dropZone.addEventListener("drop", handleDrop, false);
        //
        function handleDragEnter(e){e.stopPropagation(); e.preventDefault();}
        //
        function handleDragOver(e){e.stopPropagation(); e.preventDefault();}
        //
        function handleDrop(e){
            e.stopPropagation();
            e.preventDefault();
            //
            var url=e.dataTransfer.getData('text/plain');
            // for img elements, url is the img src so 
            // create an Image Object & draw to canvas
            if(url){
                var img=new Image();
                img.onload=function(){ctx.drawImage(this,0,0);}
                img.src=url;
            // for img file(s), read the file & draw to canvas
            }else{
                handleFiles(e.dataTransfer.files);
            }
        }
        // read & create an image from the image file
        function handleFiles(files) {
            for (var i=0;i<files.length;i++) {
              var file = files[i];
              var imageType = /image.*/;
              if (!file.type.match(imageType)){continue;}
              var img = document.createElement("img");
              img.classList.add("obj");
              img.file = file;
              var reader=new FileReader();
              reader.onload=(function(aImg){
                  return function(e) {
                      aImg.onload=function(){
                          ctx.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

    }; // end $(function(){});
    body{ background-color: ivory; }
    #canvas{border:1px solid red; margin:0 auto; }
    <!doctype html>
    <html>
        <body>
            <h4>Drag an image from below onto the canvas, or<br>Drag an image file from your desktop onto the canvas.</h4>
            <canvas id="canvas" width=300 height=300></canvas>
            <br>
            <img width="50" src="https://cfl.dropboxstatic.com/static/images/index/rebrand/logos/glyphs/glyph_french_vanilla.svg">
        </body>
    </html>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将图像从网页的 html 部分拖放到画布上后如何访问图像数据? 的相关文章

  • 如何在画布上所有其他内容后面绘制图像? [复制]

    这个问题在这里已经有答案了 我有一块画布 我想用drawImage在画布上当前内容后面绘制图像 由于画布上已经有内容 我正在使用字面上的画布来创建包含图像的画布 因此我无法真正先绘制图像 所以我无法使用drawImage在我呈现其余内容之前
  • WPF画布性能-children.add调用多次

    我在长画布上绘制了很多线条 想想条形图 并对其性能进行了相当好的调整 使用低级几何类并冻结它们等 这极大地提高了性能 但仍然需要几秒钟将几千个项目加载到画布中 我对应用程序进行了性能分析 看起来每次调用都花费了很大一部分时间canvas c
  • 取消html5浏览器中的单图请求

    我正在动态加载 大 图像以绘制到 html5 画布中 如下所示 var t new Image t onload t src http myurl 但每隔一段时间就会想取消图片请求完全地 我想出的唯一方法是设置src to i e t sr
  • 如何使用canvas.toDataURL()将画布保存为图像?

    我目前正在构建一个 HTML5 Web 应用程序 Phonegap 本机应用程序 我似乎不知道如何将画布保存为图像canvas toDataURL 有人可以帮我吗 这是代码 有什么问题吗 我的画布被命名为 canvasSignature J
  • 在 Firefox 扩展中,如何将富文本/链接复制到剪贴板?

    具体来说 我想复制一个链接 带有文本和位置 然后能够将其粘贴到例如 Word 中作为链接 这是实际的代码 var richText a href gContextMenu linkText a var xfer Components cla
  • 如何在 onDraw() 方法中定义与像素无关的高度

    我扩展了 View 来构建自定义小部件 我想用独立的像素单位定义小部件的高度 我认为可以通过将像素密度乘以所需的高度来完成 但我不知道该怎么做 到目前为止我所拥有的 最小化 public class Timeline extends Vie
  • 您如何在 Android 上处理超高 MP 相机(和图像)? - “画布:尝试绘制太大的位图”

    我有一个活动 用户可以像这样打开相机 getPictureUri createImageFromFile true let photoUri it openCameraActivity REQUEST IMAGE CAPTURE it ph
  • 如何在 Firefox 30 上调试 Greasemonkey 脚本?

    我一直在为 Youtube 开发一个 JavaScript 片段 它使用 Greasemonkey 并且还导入 Bootstrap 和 jQuery 库 该应用程序必须为每个搜索列表结果添加一个按钮 当用户单击该按钮时 它必须带出用户从其频
  • 特别更改画布上的笔画不透明度,但不更改颜色

    我有一个漂亮整洁的脚本 可以循环显示颜色 并且与 xxxxxx格式 但我想改变透明度 有没有办法做到这一点 我指的是ctx strokeStyle 这是当前的代码 canvas strokeStyle 16777215 s length i
  • 仅最后一个用户控件显示内容控件

    我有一个奇怪的问题 我创建了一个带有标签和画布的用户控件 画布引用资源 但画布仅显示在我的堆栈面板中的最后一个控件上 这是我的窗户
  • HTML Canvas - 动态更改文本

    当我在输入文本字段中输入内容时 我试图更改 html 画布上的文本 但是 我可以添加文本 如果我删除并再次输入 新文本将添加到旧文本的顶部 JSFIDDLE https jsfiddle net bm7jv7bk 1 document ge
  • Firefox 中的 Signalr 连接意外中止

    我正在使用 SignalR 具有跨域请求 2 3 0 版 用于集成到 ASP NET 站点的网络聊天 一切正常 但我发现 SignalR 连接的奇怪行为 当我单击聊天选项卡中的引用进行文件下载时 SignalR 连接被中止 并且在我的 Hu
  • 如何提高Canvas渲染性能?

    我必须画很多Shape http msdn microsoft com en us library system windows shapes shape aspx 约 1 20 万 作为 Canvas 2 的子级 我在 WPF 应用程序中
  • 如何在 Linux/OS X 上温和地终止 Firefox 进程

    我正在使用 Firefox 进行一些自动化操作 尽管我可以从 shell 打开 Firefox 窗口 但我无法正确终止它 如果我kill火狐进程与kill 3 or kill 2当我下次打开新的 Firefox 窗口时 命令会询问我是否要在
  • 如何将 Firebug 停靠在浏览器窗口中?

    在新窗口中打开后如何将 Firebug 停靠在浏览器窗口中 对于 Mac OS X 10 5 上的 Firefox 3 0 8 和 Firebug 1 3 我无法将其停靠在浏览器窗口中 如何解决问题 背景 火狐浏览器10 0 10 脚步 如
  • 在 UWP 中拖放到银行帐户列表中

    我有一个本地银行的通用 Windows 应用程序 我正在处理汇款视图 他们需要使用 UWP 应用程序中的拖放功能将资金从一个帐户转移到另一个帐户 我已经制作了动画部分 但在将列表项拖放到 帐户至 列表后需要帮助 I ll attach a
  • Firefox 页面未正确重定向

    当我访问我的特定网址时asp net mvc 3 questions tagged asp net mvc 3我在 Firefox 中收到此错误 有问题的页面是登录屏幕 页面未正确重定向 Firefox 检测到服务器正在重定向请求 这个地址
  • Firefox 忽略 CSS 中的最小高度

    由于某些原因 最小高度在 Firefox 上不起作用 我尝试在 body 上设置 min height 但 Firefox 完全忽略了它 由于我的页面是动态的 我不能只将高度设置为 100 我应该怎么办 body border 1px so
  • Chrome --app 相当于 Firefox\IE

    我有一个网络应用程序 客户要求单击不同按钮时更改浏览器窗口大小 我发现在那link https stackoverflow com questions 13436855 launch google chrome from the comma
  • CreateJs Canvas 形状在 Windows Phone 上丢失坐标

    我正在制作一个 Createjs 和 html5 项目 在其中绘制一个形状 红色圆圈 当我单击圆圈时它会发出警报 它在所有台式机和 Android 手机上都能正常工作 除非我在 Windows Phone 中打开它 否则它在普通屏幕上工作正

随机推荐

  • 如何使用java自动从日历中选择特定日期

    我有一个案例 我必须从日历中选择 3 天回溯的日期 如何使用 selenium 自动化此案例 我正在使用 java 和 selenium 进行自动化 1 假设您可以在输入字段中写入日期 并且日历只是图标 你可以有这样的辅助方法 public
  • 如何在提交事件处理程序中获取表单值?

    我试图开始使用一个非常简单的 Google 表单 其中仅包含几个问题 只有 2 个选项和一个简短文本的多项选择 创建后 我打开脚本编辑器并输入 function onSubmit e Logger log onSubmit s JSON s
  • WP7 (Windows Phone 7) 在 XAML 或 C# 中锁定手机方向

    Windows Phone 7 是否可以手动锁定手机方向 因为我使用加速度计来处理具有固定 UI 的按钮旋转 我已经尝试过了 在 XAML 中 SupportedOrientations Landscape Orientation Land
  • 将 simple-prefs (SDK API) 与外部脚本和 postMessage 一起使用

    我正在使用 SDK 开发附加组件的新版本 针对 Gmail 并且需要为我的用户存储一些布尔首选项 为此 我想使用新的 simple prefs API 基于Mozilla 文档和这个堆栈溢出问题 我得到了一些东西 但我面临以下问题 1 我无
  • 是否可以在 vscode 中将您的代码分为 R 部分?

    有没有办法使用类似于 RStudio 的代码部分 或 MATLAB 的 在 VSCode 中 我想将我的代码分为几个部分并有选择地运行这些部分 那可能吗 Thanks Yasir 我认为您正在了解一些不同的事情 如果您想划分代码并像 jup
  • 在 R 中索引冗余命名的向量

    在 R 中 当有一个冗余命名向量时 为什么无法使用选择运算符检索命名向量中的所有元素 v lt c 1 2 3 4 5 names v lt c a b c c a v c Returns only 3 not c 3 4 看起来 R 假设
  • webGL单帧“截图”

    尝试寻找类似的东西 但我没有运气 我正在尝试打开一个新选项卡 其中包含 webgl 图像当前状态的屏幕截图 基本上 它是一个 3D 模型 能够更改显示的对象 这些对象的颜色以及背景颜色 目前 我正在使用以下内容 var screenShot
  • E*Trade API 在获取访问令牌时经常返回 HTTP 401 Unauthorized,但并非总是如此

    Summary 我编写了一个简单的 C NET Core 应用程序 使用 OAuthv1 对 E Trade API 进行身份验证 目的是获取股票报价 我能够进行身份验证并获取请求令牌 重定向到授权页面并获取验证程序字符串 但是 当我使用验
  • 通过 Zip Google Geocode Api 查找城市和州 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我基本上想检索邮政编码内的城市和州列表 Google Geocode API 可以这样做吗 我尝试查看文档 但发现信息过多 任何帮助 将不胜感激 如
  • 使用 C 访问 Twitter Streaming API

    我正在尝试使用 C 访问 Streaming API 并使用以下代码 include
  • 在 Windows 服务 C# 中引发自定义类事件

    我确实编写了一个可以使用 dll 连接到网络设备的 Windows 服务 所以一切正常 但是事件处理程序在 win 服务中不起作用 这是我的代码 我的自定义类代码 using System using System Collections
  • 浏览器之间的颜色(颜色)差异?

    我刚刚注意到我正在处理的一个网站在 Chrome 中看起来与其他浏览器 saf ff 不同 Chrome 中的所有内容都更加饱和 甚至是背景色 rgb 我不知道是什么导致了这种情况发生 不能与 img 颜色配置文件有任何关系 否则 rgb
  • 在 Swift 中创建一个接受本机 Swift 协议的弱容器

    这是 Swift 中的标准样板弱容器 struct Weak
  • 为每条记录保存带有新行的 R JSON 对象

    我正在尝试保存一个 JSON 对象 其中每一行都是一条记录 如何保存 JSON 对象以使行数等于记录数 在下面的示例中为 5 library jsonlite df mtcars 1 5 x lt jsonlite toJSON df re
  • 什么是投影和选择?

    投影和选择有什么区别 是吗 投影 gt 用于选择表的列 和 选择 gt 选择表的行 那么投影和选择分别是垂直和水平切片吗 Exactly 投影意味着选择哪些列 或表达式 查询应返回 选择 means 哪些行将被退回 如果查询是 select
  • 如何让物体沿圆弧路径运动?

    我正在制作一个游戏 其中应该有一个机器人向另一个机器人扔球形物体 投出的球应以对称的弧线飞行 很确定这个数学词是抛物线 两个机器人都在 x 轴上 我怎样才能在我的游戏中实现这样的事情 我尝试了不同的方法 但没有一个有效 我的游戏中当前移动物
  • 透明背景模糊的 JFrame

    我想对 JFrame 的背景进行模糊处理 该背景是透明的以显示其下方发生的情况 但我不知道如何模糊背景并避免闪烁 我想要实现的是拥有一个稍微模糊的透明背景 但仍然显示其下方窗口的 实时视图 而不是拥有不改变的模糊静态图片 请记住 窗口可能会
  • Laravel 中的二维码

    我想制作qr码 在那里我可以制作它 但是当我想将qr码的格式更改为png文件时遇到麻烦 但它唯一的显示符号 这是我的观点 我使用这个二维码 simplesoftwareio simple qrcode 1 这是我的参考 https www
  • 对自己调用复制构造函数

    我很好奇我几乎错误地编写的这段代码中发生了什么 include
  • 将图像从网页的 html 部分拖放到画布上后如何访问图像数据?

    这是一个后续问题如何将文本和图像拖放到画布上 火狐41 0 1 我根本不知道如何访问我放到画布上的图像的图像数据 我尝试过类似的事情data event dataTransfer getData image 但这一切都不起作用 functi