首页 > 其他分享 >vue项目Canvas给图片改色,返回base64的图片

vue项目Canvas给图片改色,返回base64的图片

时间:2023-09-08 15:47:40浏览次数:37  
标签:Canvas vue imageData canvas myImage let var Math 图片

 (适应于纯色图片)

1.vue文件中创建canvas

<!-- 落图图片改色 -->
<canvas id="mycanvas"></canvas>

2.创建changeImgColor.js文件

let ctx = null;
let canvas = null;
let base64Info = null;
export function setImgColor(url) {
    return new Promise((resolve) => {
        let myImage = new Image();
        myImage.src = url;
        let width = myImage.width;
        let height = myImage.height;
        canvas = document.getElementById('mycanvas');
        if (canvas.getContext) {
            ctx = canvas.getContext('2d');
            myImage.onload = () => {
                // console.log('加载图片', width, height)
                // 图片绘制
                ctx.drawImage(myImage, 0, 0);
                // 然后获取图片数据
                var imageData = ctx.getImageData(0, 0, 34, 36);
                var length = imageData.data.length;
                var rc = randomColor();
                var colorArr = rc.split(',');
                for (var index = 0; index < length; index += 4) {
                    // 这里可以对 r g b 进行计算(这里的rgb是每个像素块的rgb颜色)
                    imageData.data[index] = colorArr[0];  // r
                    imageData.data[index + 1] = colorArr[1];   // g
                    imageData.data[index + 2] = colorArr[2];   // b
                }
                // 更新新数据
                ctx.putImageData(imageData, 0, 0);
                // canvas转base64
                base64Info = getImageBase64Data(91, 70)
                // console.log('1111', base64Info)
                resolve(base64Info)
            }
        } else {
            console.log('图片未创建!')
        }
    })
}
function randomColor() {  // 得到随机的颜色值
    var r = Math.floor(Math.random() * 256);
    var g = Math.floor(Math.random() * 256);
    var b = Math.floor(Math.random() * 256);
    return r + ',' + g + ',' + b;
}

function getImageBase64Data(w, h) {
    let cropImgInfo = ctx.getImageData(0, 0, w, h)
    let newCanvas = document.createElement('canvas')
    newCanvas.width = w
    newCanvas.height = h
    let newCtx = newCanvas.getContext('2d')
    newCtx.putImageData(cropImgInfo, 0, 0)
    let base64 = newCanvas.toDataURL()
    return base64
}

3.引入改色工具并使用

import { setImgColor } from '@/utils/changeImgColor.js'
let imgs = await setImgColor('images/remoteSence/loc2.png')

 

标签:Canvas,vue,imageData,canvas,myImage,let,var,Math,图片
From: https://www.cnblogs.com/wq805/p/17685764.html

相关文章

  • C#实现图片的旋转功能
    WinForms直接提供了图片旋转的功能,相对来说比较方便。示例代码:varbitmap=Bitmap.FromFile(fileName);if(clockwise){bitmap.RotateFlip(RotateFlipType.Rotate90FlipNone);}else{bitmap.RotateFlip(RotateFlipType.Rotate270FlipNone);}bitmap.Save(tempFi......
  • Vue开发流程
    #Vue简介  Vue(发音为/vjuː/,类似 view)是一款用于构建用户界面的JavaScript框架。它基于标准HTML、CSS和JavaScript构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面,Vue都可以胜任。声明式渲染:Vue基于标准H......
  • 智能安防监控系统EasyNVR支持获取RTSP视频流实时快照图片
    TSINGSEE青犀视频作为网页无插件直播视频平台的积极开拓者,在行业内推出了多项产品,如EasyNVR、EasyDSS等,并已成功应用于多个项目。TSINGSEE青犀视频安防视频智能监控系统支持视频直播、录像回放,并提供视频流快照保存功能。在用户使用过程中,有人需要从RTSP视频流中获取自定义时间的视......
  • 解决vue3+js unplugin-auto-import/vite 自动引入生效后 页面eslint报错
           ......
  • vue实现一个右侧悬浮工具栏
    最近在写商城时需要用到一个右侧悬浮的工具栏,并把这个写成了控件,刚开始是想要使用elementui自带的backtop组件的,无奈能力有限,不能改造成多列的结果,所以就只能自己写一个了这个控件实现的功能为,一开始只有3个内容,当页面下滑后会多出一个回到顶部的内容,并使用定时器连贯的回到顶部......
  • selenium 解析验证码(普通的字符数字的验证码),解决方式:先将验证码保存为图片,然后使用ddd
     fromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromPILimportImagefromioimportBytesIOimportpytesseractimporttimeimportddddocrfromselenium.webdriver.supportimportexpected_conditionsfromselenium.webdriver.sup......
  • vue路由跳转
    第一种方式  <router-link :target="$store.getters.username?'_blank':'_self'"class="course-item-cont":to="$store.getters.username?{path:'/VirtualClass/Detail',query:{id:item.id,introductionPat......
  • python爬虫练习1-百度图片
     写了一个简单的爬图片练习importrequestsimportosdefbd_img(title1):url=f'https://image.baidu.com/search/acjson?tn=resultjson_com&logid=10755979809828115852&ipn=rj&ct=201326592&is=&fp=result&fr=&word={title1}&queryWord......
  • vue+el-timeline动态表格时间线
    原文链接:https://blog.csdn.net/Shids_/article/details/126645038前言当我们需要在页面中展示一系列时间相关的事件时,常常会考虑使用时间线来呈现。而在vue框架中,我们可以借助一些组件库来快速实现时间线的功能。其中,el-timeline就是一款非常优秀的时间线组件,它可以帮助我们......
  • Firefox正在优化Vue.js,后续将提高运行效率
        据了解,日前Firefox浏览器正针对Vue.js进行优化,而早前FireFox浏览器在面向Vue3时遇到了一些性能问题。当前开发人员在Firefox118内部版本中进行了测试,而正式版本将于9月底发布,将“显著提升”Vue.js的运行效率ireiuposghj。据了解,开发人员目前正在更新Speedo......