html5中如何使用canvas实现图片打码
发表于:2024-11-28 作者:千家信息网编辑
千家信息网最后更新 2024年11月28日,这篇文章主要介绍了html5中如何使用canvas实现图片打码的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇html5中如何使用canvas实现图片打码文章都会有所收获,
千家信息网最后更新 2024年11月28日html5中如何使用canvas实现图片打码
这篇文章主要介绍了html5中如何使用canvas实现图片打码的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇html5中如何使用canvas实现图片打码文章都会有所收获,下面我们一起来看看吧。
准备工作
demo 基于 vue + elelment-ui
首先创建一个html文件, 并引入 vue 和 elelment-ui(注意还有样式文件)
Document
接下来就可以写我们的打码功能啦
实现思路
创建canvas画布,并将要打码的图片绘制上去
监听鼠标在图片上的点击,移动、松开事件,在canvas画布上绘制要打码的区域
处理绘制的打码区域
保存打码后的图片
将要打码的图片绘制到canvas画布上
// 初始化 绘制图片toCode (currentImg) { this.$nextTick(() => { // 获取将要绘制的canvas的父元素节点 let parentId = document.getElementById('parentId') // 初始化图片 let drawImg = new Image() drawImg.setAttribute('crossOrigin', 'anonymous') drawImg.crossOrigin = 'Anonymous' drawImg.src = currentImg // 创建canvas元素并添加到父节点中 let addCanvas = document.createElement('canvas') parentId.appendChild(addCanvas) let canvas = parentId.lastElementChild canvas.id = 'imgCanvas' if (canvas.getContext) { let ctx = canvas.getContext('2d') // 绘制图片 drawImg.onload = function () { canvas.width = 720 canvas.height = 500 ctx.drawImage(drawImg, 0, 0, 720, 500) } } })}
点击打码按钮,绘制打码区域
思路:
鼠标点击,获取点击时的坐标,每次点击前可能会存在打过码的区域,先清除画布,重新绘制图片
鼠标移动,开始绘制打码的矩形,通过移动的坐标和上面点击的点坐标确定绘制的矩形坐标和宽高
将绘制的打码矩形,分割成一个个宽高15像素的小正方形,并给每个小正方形生产随机颜色
鼠标松开,停止绘制矩形
// 打码dialogCode (img) { let parentId = document.getElementById('parentId') let canvas = document.getElementById('imgCanvas') if (canvas.getContext) { let ctx = canvas.getContext('2d') let drawImage = new Image() drawImage.crossOrigin = 'Anonymous' drawImage.src = img drawImage.onload = () => { ctx.drawImage(drawImage, 0, 0, 720, 500) } // 鼠标点击 parentId.onmousedown = e => { ctx.clearRect(0, 0, canvas.width, canvas.height) ctx.drawImage(drawImage, 0, 0, 720, 500) this.flag = true this.clickX = e.offsetX // 鼠标点击时的X this.clickY = e.offsetY // 鼠标点击时的Y } // 鼠标松开 parentId.onmouseup = () => { this.flag = false } // 鼠标按下 parentId.onmousemove = e => { if (this.flag) { ctx.clearRect(0, 0, canvas.width, canvas.height) ctx.drawImage(drawImage, 0, 0, 720, 500) ctx.beginPath() let pixels = [] // 二维数组,每个子数组有5个值(绘制矩形左上角的X坐标、y坐标,矩形的宽、高,生成的4位随机数用于颜色值) for (let x = 0; x < (e.offsetX - this.clickX) / 15; x++) { for (let y = 0; y < (e.offsetY - this.clickY) / 15; y++) { pixels.push([(x * 15 + this.clickX), (y * 15 + this.clickY), 15, 15, Math.floor(Math.random() * 9999)]) } for (let y = 0; y > (e.offsetY - this.clickY) / 15; y--) { pixels.push([(x * 15 + this.clickX), (y * 15 + this.clickY), 15, 15, Math.floor(Math.random() * 9999)]) } } for (let x = 0; x > (e.offsetX - this.clickX) / 15; x--) { for (let y = 0; y > (e.offsetY - this.clickY) / 15; y--) { pixels.push([(x * 15 + this.clickX), (y * 15 + this.clickY), 15, 15, Math.floor(Math.random() * 9999)]) } for (let y = 0; y < (e.offsetY - this.clickY) / 15; y++) { pixels.push([(x * 15 + this.clickX), (y * 15 + this.clickY), 15, 15, Math.floor(Math.random() * 9999)]) } } // 遍历数组绘制小正方形块 for (let i = 0; i < pixels.length; i++) { ctx.fillStyle = '#bf' + pixels[i][4] ctx.fillRect(pixels[i][0], pixels[i][1], pixels[i][2], pixels[i][3]) } ctx.fill() ctx.closePath() } } }}
保存:
// 保存dialogUpload () { let canvas = document.getElementById('imgCanvas') let tempImg = canvas.toDataURL('image/png') let imgURL = document.getElementById('imgURL') imgURL.crossOrigin = 'Anonymous' imgURL.src = tempImg}
源码
复制到html文件可预览:
使用canvas一步步实现图片打码功能 点击打码按钮,在图片上绘制打码区域; 点击保存,生成打码后的图片
保存后的图片
关于"html5中如何使用canvas实现图片打码"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"html5中如何使用canvas实现图片打码"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
图片
鼠标
矩形
坐标
区域
数组
画布
功能
文件
正方
正方形
知识
颜色
生成
移动
个子
元素
内容
左上角
思路
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
怎么建立一个服务器端
西城区软件开发概况
泉州企业进销存软件开发
网络安全监督检查通报
新开通法律法规数据库
常见的机架式服务器通常由主板
七日杀服务器加载流程
安徽软件开发设施有哪些
修改数据库同义词
感应一卡通数据库密码
专升本计算机数据库四大语句
维护网络安全的部门电话
落实网络安全责任制举措
尘梦网络技术有限公司
给网络安全打补丁
软件开发怎么提高工资
教育部关于网络安全的要求
软件开发项目经理金融知识
南昌市服务器搬运选哪家
移动互联网通信科技龙头股
数据库2005怎么重装
网络安全攻防硕士研究
java怎么链接两个数据库
淮安网站建设服务器
天津红桥区网络安全厂家
丹东软件开发多少钱
汉得软件开发工资
网络安全购物有奖问答
广州帕克西软件开发有限公司官网
网络技术部考核