在 HTML5 Canvas 中绘制图像,同时保留图像

2024-01-04

在HTML5 Canvas中,最简单的绘制方式是什么and move图像上的一条线(已经在画布上),保留下面的图像? (例如,有一条垂直线跟踪鼠标 X 位置)

我当前的画布:

$(document).ready(function() {
  canvas = document.getElementById("myCanvas");
  context = canvas.getContext("2d");
  imageObj = new Image();

    imageObj.onload = function() { 
    context.drawImage(imageObj, 0,0);  
  }
  imageObj.src = "http://example.com/some_image.png";
  $('#myCanvas').click(doSomething);
});

您将必须使用画布完成大部分基础工作,在这种情况下,您将必须实现移动线条的功能,然后重新绘制所有内容。

步骤可以是:

  • 将线条保留为可以自渲染的对象(对象上的方法)
  • 监听 mousemove(在本例中)以移动线
  • 对于每次移动,重新绘制背景(图像),然后在新位置渲染线条

您可以重新绘制整个背景,也可以对其进行优化以仅绘制最后一行。

这是一些示例代码和现场演示在这里 http://jsfiddle.net/AbdiasSoftware/5a2LR/:

var canvas = document.getElementById('demo'), /// canvas element
    ctx = canvas.getContext('2d'),            /// context
    line = new Line(ctx),                     /// our custom line object
    img = new Image;                          /// the image for bg

ctx.strokeStyle = '#fff';                     /// white line for demo

/// start image loading, when done draw and setup 
img.onload = start;
img.src = 'http://i.imgur.com/O712qpO.jpg';

function start() {
    /// initial draw of image
    ctx.drawImage(img, 0, 0, demo.width, demo.height);

    /// listen to mouse move (or use jQuery on('mousemove') instead)
    canvas.onmousemove = updateLine;
}

现在我们需要做的就是有一个机制来更新每次移动的背景和线条:

/// updates the line on each mouse move    
function updateLine(e) {

    /// correct mouse position so it's relative to canvas
    var r = canvas.getBoundingClientRect(),
        x = e.clientX - r.left,
        y = e.clientY - r.top;

    /// draw background image to clear previous line
    ctx.drawImage(img, 0, 0, canvas.width, canvas.height);

    /// update line object and draw it
    line.x1 = x;
    line.y1 = 0;
    line.x2 = x;
    line.y2 = canvas.height;
    line.draw();
}

这个演示中的自定义线条对象非常简单:

/// This lets us define a custom line object which self-draws
function Line(ctx) {

    var me = this;

    this.x1 = 0;
    this.x2 = 0;
    this.y1 = 0;
    this.y2 = 0;

    /// call this method to update line        
    this.draw = function() {
        ctx.beginPath();
        ctx.moveTo(me.x1, me.y1);
        ctx.lineTo(me.x2, me.y2);
        ctx.stroke();
    }
}

如果您不打算对图像本身执行任何特定操作,您也可以使用 CSS 将其设置为背景图像。不过,在重新绘制线条之前,您仍然需要清除画布。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 HTML5 Canvas 中绘制图像,同时保留图像 的相关文章

  • jQuery输入文件点击方法和IE上拒绝访问

    我尝试仅使用一个按钮作为输入文件 它在 Firefox Chrome Safari 中工作正常 但在 IE 中不行 提交表单时我总是收到 访问被拒绝 的消息 代码 input file click 有真正的解决方法吗 我在谷歌上浪费了大约2
  • JSP/Servlet HTTP 404 错误处理

    我想在我的网络应用程序中处理 HTML 404 错误 我可以这样写
  • 检测 Google 验证码的挑战窗口何时关闭

    我正在使用谷歌隐形验证码 有没有办法检测挑战窗口何时关闭 我所说的挑战窗口是指您必须选择一些图像进行验证的窗口 目前 我在按钮上放置了一个旋转器 一旦单击按钮 就会呈现验证码挑战 无法向用户提示另一个质询窗口 我以编程方式调用渲染函数 gr
  • 访问 nuxt 配置文件中的存储

    我想添加通过 Nuxt 静态生成的动态路由 我定义了一个客户端 服务器端存储asyncData方法 我想将这个存储值 一个数组 映射到我的nuxt config js文件使其成为 动态 静态 路线图nuxt generate命令 但如何访问
  • JS 保留以零结尾的小数[重复]

    这个问题在这里已经有答案了 在JavaScript中 是否可以 锁定 十进制数 以保留以零结尾的 浮点数 例如 我有 2 个不同的数字 如下所示 伪代码 let a 1 0 let b 1 00 a b true should be fal
  • 如何在 select 和 option 标签中添加 JSON 数据?

    我有这个html代码 div class searchfilter div class searchwrapper div div
  • karma/jasmine 控制台更详细的测试结果

    我使用 Karma 和 Jasmine 进行 javascript 单元测试 假设我有一个失败的测试 如下所示 expect objectA toEqual expectedObjectA 当失败时 我看到控制台上转储了两个对象 并显示一条
  • 检索 css3 缩放元素的宽度/高度

    我正在与 offsetWidth 属性的奇怪之处 我认为 作斗争 这是场景 比方说 我有一个span标签 在我的js中 在某个时刻我执行css3转换 对于这个元素 例如 el set styles transform scale scale
  • JavaScript中如何确保输入的值是数字而不是字符串?

    我创建了这个函数 function num var x prompt please enter your first number var y prompt please enter your second number if isNaN
  • 为什么我收到“在嵌套函数中通过 this 对类字段进行潜在无效的引用访问”错误

    在普通 JS 中 我的代码可以正常工作 对于这种情况 我想组件化我的Wall类应该在浏览器中显示用户上传的图像 同样 这在 vanilla JS 中正常工作 但在 JSX 中不起作用 我得到了一个potentially invalid re
  • HTML 代码中的 PHP [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我用 HTML 代码编写了 PHP div div 但这出现在输出页面中 else print 我怎样才能让PHP执行 你的文件有一个 p
  • Web组件中嵌套槽的内容不可见

    我有一个 Web 组件 它应该接受任意元素来包装其内容 虽然我可以在 Chrome 开发工具中看到插槽已正确分配 但 DOM 中什么也没有出现 以前有人见过这个问题吗 定义 class ExampleParent extends HTMLE
  • 尝试使用 Javascript 解决对称差异

    我正在尝试找出对称的解决方案 使用 javascript 完成以下任务的差异 目标 接受未指定数量的数组作为参数 保留数组中数字的原始顺序 不删除单个数组中数字的重复项 删除数组中出现的重复项 因此 例如 如果输入是 1 1 2 6 2 3
  • PDF 在 Safari 中隐藏 Jquery Modal

    这是与我有关的事情this https stackoverflow com questions 24052681 pdf hide jquery modal in ie问题 在 IE 中 我在对话框中使用 iframe 解决了问题 所以它工
  • ThreeJS 中阴影的奇怪行为

    所以我有一个 ThreeJS 场景 并且添加了一些球体 多材质 我还添加了定向光 this light new THREE DirectionalLight 0xFFFFFF 1 this light position set 2 10 2
  • 以角度访问窗口 TemplateUrl 内的范围

    我的模式有一个 windowTemplateUrl 如下 div class modal fade div class modal dialog div class modal content square btn div div div
  • 如何映射轮播的子项数组?

    我正在尝试将 Carousel 组件包装在映射对象数组周围作为组件的子级 目前我只能让映射创建映射对象的 1 个子对象 轮播需要像这样
  • 将多维数组转换为单数组(Javascript)

    我有一个对象数组 来自 XLSX js 解析器 因此其长度和内容各不相同 表示已给予项目的资助 简化后 它看起来像这样 var grants id p 1 location loc 1 type A funds 5000 id p 2 lo
  • 如何在运行脚本之前提交活动单元格中所做的更改? (Google 表格/Google Apps 脚本)

    我正在使用 Google Apps 脚本在 Google 表格中创建提交表单 该表单位于一页上 提交内容被移至第二个隐藏页面 当用户填写表单后 他们按下提交页面上的按钮以激活脚本 我遇到的问题是 当用户填写最后一个单元格然后单击按钮时 输入
  • 如何在 Jquery/Javascript 中绑定模糊和更改,但只触发一次函数?

    我试图在选择元素更改时触发函数 由于 Ipad 在 on change 方面遇到问题 我还想绑定到 blur 这在 Ipad 上工作得很好 但是我不希望两个事件都触发该函数两次 所以我需要某种挂钩来确保两个事件是否都触发change and

随机推荐

  • 索引/匹配 - 如果第一个值为空,则查找第二个值

    我希望在用 Excel 编写公式时得到一些帮助 我有一个表 其中包含员工列表及其手机号码 但是 该表的结构方式存在许多空白行和重复行 本质上 我希望通过对相应的手机号码执行查找来创建一个没有任何重复项和空白的新表 问题是 当我执行标准索引
  • 如何在 Kubernetes Python 客户端中指定 ca_bundle

    我正在尝试使用Kubernetes Python 客户端 https github com kubernetes client python连接到我的 Kubernetes 集群 该 API 位于我的 CA 签署的 SSL 证书后面 如果我
  • 使用 jwt 和许多角色进行基于角色的访问

    我有一个带有许多控制器的 Web api 通过这些控制器 我定义了很多角色并装饰了控制器 功能 为了访问 api 我使用 jwt 我尝试将我的角色写入 jwt 之类的键值中 这工作正常 但如果我在 jwt 中设置许多角色 令牌就会变得非常大
  • Bootstrap 3.1.0:附加太长

    我在用引导程序3 1 0 当 附加 对于视口来说太长时 它会被切断 永远不会显示底部项目 是否有可能让 Bootstrap 的词缀以用户仍然可以从上到下滚动完整词缀的方式运行 有问题的例子 div class container div c
  • Python 中列的绝对值

    如何将 计数 列的值转换为绝对值 我的数据框的摘要如下 datetime count 0 2011 01 20 00 00 00 14 565996 1 2011 01 20 01 00 00 10 204177 2 2011 01 20
  • Python快速异或超范围算法

    有一个编程挑战 需要生成一个XOR基于序列起始号和间隔长度的校验和 它要求您根据间隔长度迭代序列 并在每次迭代时不断减少为校验和计算选取的元素数量 Example 如果起始编号是0间隔长度为3 该过程将如下所示 0 1 2 3 4 5 6
  • java中堆内存和字符串常量池有什么区别

    In Java 使用创建的对象新操作员将被存储在堆 记忆 使用创建的对象字符串字面量存储在 这字符串常量池 我正在运行以下代码来检查哈希码 String nameOne Deepak String nameTwo new String De
  • 混合手动\自动编号序列

    在编号顺序设置 CS201010 中 有一个手动编号选项 但是 取决于文档类型 在某些情况下 参考编号可以留空 如果它是空白的 我希望自动编号启动 或者在保存文档之前调用 NextNumber 函数 是否可以 我怎么做 目前 如果我强制执行
  • 相当于其他编译器中gcc/clang的march=native?

    我想知道除了 gcc 和 clang 之外是否还有其他编译器提供类似 march native选项 如果有 该选项是什么 我已经从另一个问题中明白了 在 Visual C 中自动构建最佳可用平台 相当于 gcc 的 march native
  • 为什么 const 成员必须在构造函数初始值设定项中初始化,而不是在其主体中初始化?

    为什么类成员必须声明为const在构造函数初始值设定项列表中而不是在构造函数主体中初始化 两者有什么区别 在 C 中 当执行进入构造函数主体时 对象被视为完全初始化 你说 我想知道为什么 const 必须在构造函数初始值设定项列表中而不是在
  • stateChangeStart 中从子状态访问父状态的参数

    有没有办法从父状态获取参数 我的州看起来像这样 stateProvider state home url home param1 template div home div
  • 在 django-rest-framework 验证器中为整数字段强制指定整数类型

    django rest framework 验证器接受字符串引用的整数作为整数字段的有效数据 有没有办法强制规定数据类型 以便不接受字符串引用的整数 序列化器将原始数据保存在self initial data自定义验证方法可以从中检索它 所
  • 如何在 Android 应用程序中将 putExtra() 与 FLAG_ACTIVITY_REORDER_TO_FRONT 一起使用?

    我有一个应用程序 称为 App1 在我的 App1 中 我调用相机应用程序 intent new Intent Intent ACTION MAIN intent setComponent new ComponentName com and
  • 在 C# 中,“DateTime”类型中的“?”是什么?[重复]

    这个问题在这里已经有答案了 我刚刚在使用 System DirectoryServices AccountManagement 时遇到了一些代码 public DateTime LastLogon get 是什么 在日期时间之后 我找到了一
  • java.sql.Array/Blob/Clob 类型是否需要“free()”?

    我需要明确的电话吗free 在数组 clob 等上 或者关闭 ResultSet 和 或 Statement 会自动解决这个问题吗 javadoc 没有说什么 所以我认为这是没有必要的 但我不想做出错误的假设 另外 如果没有必要 立即关闭结
  • 如何更改力布局中节点之间的距离?

    我是 D3 的新手 正在尝试学习力布局 我想改变节点之间的链接距离并保持原点形状 我发现在更改链接的距离后 布局发生了变化 图一是原来的布局 然后我用代码改变了链接距离distance 150 第80行 使节点更进一步 但布局的变化超出了我
  • 如何使用 OpenXml 将外部图像添加到 Word 文档?

    我正在尝试使用 C 和 Open XML 将图像从 url 插入到文档中 该图像可能会发生变化 因此我不想下载它 我希望它保留为外部参考 我发现了几个像这样的例子 可以让我添加本地图像 http msdn microsoft com en
  • Ember模型间隔重载

    我有一个用户模型 它具有纬度和经度属性 用于在地图上显示当前用户位置 App User DS Model extend firstName DS attr string lastName DS attr string email DS at
  • 使用 Java 发出并发 Web 请求

    有人可以指出我用于发出并行网络请求的片段吗 我需要发出 6 个 Web 请求并连接 HTML 结果 有没有一种快速的方法来完成这个任务 或者我必须采用线程方式 谢谢 Use ExecutorService http download ora
  • 在 HTML5 Canvas 中绘制图像,同时保留图像

    在HTML5 Canvas中 最简单的绘制方式是什么and move图像上的一条线 已经在画布上 保留下面的图像 例如 有一条垂直线跟踪鼠标 X 位置 我当前的画布 document ready function canvas docume