Vue3 canvas转png,base64编码的图片转file

本文介绍了如何在JavaScript中使用HTML5CanvasAPI创建图形,并展示如何将Canvas内容转换为Base64编码的图片和File对象,以便于上传或下载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<template>
    <div>canvas</div>
    <canvas id="tutorial" width="300" height="300"></canvas>
    <br>
    <button @click="toimg">转图片</button>
    <button @click="tofile">转file</button>
  

</template>
 
<script setup>
    
   
    onMounted(()=>{
       

        var canvas = document.getElementById('tutorial');
        //获得 2d 上下文对象
        var ctx = canvas.getContext('2d');
        console.log('获得 2d 上下文对象')
        console.log(ctx)
        ctx.fillStyle = "rgb(200,0,0)";
        //绘制矩形
        ctx.fillRect (10, 10, 55, 50);
    
        ctx.fillStyle = "rgba(0, 0, 200, 0.5)";
        ctx.fillRect (30, 30, 55, 50);

       
    })
    
    //存base64编码的图片
    const base64img = ref('')
    
    //将canvas转换为png格式的图片,base64编码的图片
    const toimg = ()=>{
        var canvas = document.getElementById("tutorial");
        var image = canvas.toDataURL("image/png"); // 将canvas转换为png格式的图片,base64编码的图片
        console.log('将canvas转换为png格式的图片')
        console.log(image)
        base64img.value = image
    }
    
   
    //base64转换为file
    const tofile = ()=>{
        console.log(base64ToFile(base64img.value))
    }

    //将base64转换为文件
    const base64ToFile=(data)=> {
        // 将base64 的图片转换成file对象上传 atob将ascii码解析成binary数据
        let binary = atob(data.split(',')[1]);
        let mime = data.split(',')[0].match(/:(.*?);/)[1];
        let array = [];
        for (let i = 0; i < binary.length; i++) {
            array.push(binary.charCodeAt(i));
        }
        let fileData = new Blob([new Uint8Array(array)], {
            type: mime,
        });
        let file = new File([fileData], `${new Date().getTime()}.png`, {
            type: mime
        });
        return file;

    }
   
    
  
</script>
<style scoped>
canvas{
    border: 1px solid black;
}
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

T-小丑

需要什么demo可以留言

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值