当前位置: 首页 > news >正文

Canvas绘画功能(待补充)

由于项目的前端需要用户手绘输入,所以我们利用Canvas控件做绘画面板,并且实现了许多功能,包括手绘笔画,清空画板,上传手绘图,下载手绘图,记录用户笔画,上传背景图。以后有时间都写到这篇博客中,今天晚上想写的一个是如何隐藏input控件。代码如下:

<div style="position: absolute; overflow: hidden; width: 1px; height: 1px; opacity: 0;">
    <input class="loadCanvas" οnclick="$('#frontBgInput').click();" type="button" value="加载背景图" />
</div>

效果图如下:

 

 

 

 

 

 

 


 下面记录一下如何加载草绘图,先在前端增加一个input控件为了让用户提供草绘图的名字(这个系统因为是内部用的)所以并没有提供上传草绘图的功能,之后应该会加入的。前端代码:

<div style="position: absolute; overflow: hidden; width: 1px; height: 1px; opacity: 0;">
    <input type="file" id="frontFileInput" name="files[]" multiple="multiple" οnchange="ff.load()"/>
</div>
<input class="loadCanvas" οnclick="$('#frontFileInput').click();" type="button" value="加载草绘图" /> <br />

<input type="file">才是读入文件名的控件,而<input type="button">是为了给用户提供一个按钮,当按钮触发后调用的是<input type="file" id="frontFileInput">的click()方法,这时候再触发<οnchange="ff.load()"/>中的ff.load()方法,这里的ff是一个类名而已。这个方法的代码如下:

load: function (c) {
    var frontSketchName = $('#frontFileInput').val().toString();
    var img = new Image();
    img.onload = function () {
        var ctx = document.getElementById("test").getContext('2d');
        ctx.drawImage(img, 0, 0);

        var j_ctx = document.getElementById('test').getContext('2d');
        var j_drawData = '';
        var j_imageData = j_ctx.getImageData(0, 0, 290, 250); //获取面板图像的像素值
        for (var i = 0; i < j_imageData.data.length; i += 4) {
            j_drawData += j_imageData.data[i + 3];
            j_drawData += ',';
        }

        document.getElementById("HiddenImageDa").value = j_drawData; //将像素值字符串传到后台
    }
    img.src = 'sketch/' + frontSketchName; //图像的路径
}

 

转载于:https://www.cnblogs.com/Key-Ky/p/4452260.html

相关文章:

  • RabbitMQ(六)远程连接
  • FileInputStream与FileOutputStream类
  • Octopus系列之数据上传格式要求说明
  • IIS 之 HTTP 错误 500.19(无法访问请求页面,因为该页的相关配置数据无效)
  • 依据波形的转折点文件,转换成波形文件
  • springMvc 入门学习(自动生成 springmvc 单表 两关联表 生成 及显示)
  • HealthKit开发教程之HealthKit的主要类型数据
  • java.io.FileNotFoundException: /exapp/hadoop/name/current/VERSION (Permission denied)
  • 北漂到底要不要回老家发展?
  • openwrt开源系统LUCI配置界面
  • Apache benchmark对网站进行压力测试
  • mybatis generator生成代码工具的使用
  • SharePoint 2016 的新特性概览(二)(What's New for IT Professionals in SharePoint Server 2016)...
  • 后缀数组 --- HDU 3518 Boring counting
  • C++语言基础 例程 基类与派生类的转换
  • [deviceone开发]-do_Webview的基本示例
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • CAP理论的例子讲解
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • Java应用性能调优
  • JSONP原理
  • k个最大的数及变种小结
  • Python连接Oracle
  • React+TypeScript入门
  • 第十八天-企业应用架构模式-基本模式
  • 关于extract.autodesk.io的一些说明
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 深度学习中的信息论知识详解
  • 说说动画卡顿的解决方案
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 再次简单明了总结flex布局,一看就懂...
  • ​iOS安全加固方法及实现
  • #QT(TCP网络编程-服务端)
  • #Z2294. 打印树的直径
  • (¥1011)-(一千零一拾一元整)输出
  • (2022 CVPR) Unbiased Teacher v2
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (solr系列:一)使用tomcat部署solr服务
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (学习日记)2024.02.29:UCOSIII第二节
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .net 受管制代码
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .NET微信公众号开发-2.0创建自定义菜单
  • .NET下ASPX编程的几个小问题
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • /etc/sudoers (root权限管理)
  • @Not - Empty-Null-Blank
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • [android] 请求码和结果码的作用
  • [C#7] 1.Tuples(元组)