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安全错误
数据库的锁怎样保障安全
网络安全防控通报
ppt数据分析怎么自定义数据库
少年西游记服务器怎么看是爆满
假期网络安全观后感
什么网站需要服务器
网络安全员会议发言材料
数据库sql语句大全
时钟同步服务器芯片
华冠智能卡软件开发
洛阳商讯网络技术服务有限公司
网络安全实验室建设图片
外文全文数据库和电子期刊
阿里巴巴集团服务器机房
五年级网络安全活动计划
嵌入式软件开发区拍照app
软件开发需要学哪些语言
生日日记软件开发
国土局 网络安全 风险排查
台州飞度网络技术有限公司
中小企业网络技术
江西服务器电源哪个牌子好
混乱的服务器简介
大学可以学什么软件开发
小米手机邮箱收件服务器密码错误
加强网络安全管理2020
游戏服务器在什么地方
中国网络安全员是谁
主机搭建服务器
server数据库每年使用费
余姚直销软件开发周期