canvas生成海报

需求:

提供一个模板图片,商家输入自己的店铺名,即可生成一张海报。

实现:

使用canvas 画出模板,获取 input 框的内容,再将其添加到指定位置,下载保存。

代码如下:

结构

    <body>

    <input type="text" id="merchants" placeholder="请输入店铺名(不要太长哦)">
    <button id="generate">点击生成海报</button>
    <button id="save">保存海报</button>
    <canvas id="myCanvas" width="750" height="1000">您的浏览器不支持 HTML5 canvas 标签。</canvas>

</body>

样式

    <style>
        #merchants{
            width: 300px;
            height: 30px;
            border: 1px solid #ff9191;
            position:absolute;
            top: 0;
            left: 50%;
            transform: translateX(-50%);
            font-size: 24px;
        }

        #generate,#save{
            position: absolute;
            top: 70px;
            left: 50%;
            transform: translateX(-50%);
            height: 40px;
            width: 120px;
            border-radius: 16px;
            background: #ff6868;
        }

        #save{
            transform: translateX(50%);
        }

        #myCanvas{
            position: absolute;
            top: 110px;
            left: 50%;
            transform: translateX(-50%);
        }
    </style>

js功能

  • 获取元素

     ```
     let myCanvas = document.getElementById('myCanvas');
     let merchants = document.querySelector('#merchants');
     let generate = document.querySelector('#generate');
     let save = document.querySelector('#save')
     ```
    
  • 创建画布

    ```
    let ctx = myCanvas.getContext("2d");
    myCanvas.style.letterSpacing = '2px';//字体字间距
    ctx.font = "bold 30px STHeiti";//字体样式
    ctx.textAlign = 'center';//字体轴线位置
    ctx.fillStyle = "#dc4449";//填充(字体)颜色
    ```
    
  • 加载模板图片

    ```
    
    let myImg = new Image();//图片,也可以使用img标签,通过获取el
    myImg.setAttribute('crossOrigin', 'anonymous');//在线图片必须,处理跨域
    myImg.src = '';//图片地址
    myImg.onload = function () {//必须在图片加载完成后再调用
        ctx.drawImage(myImg, 0, 10);
    }
    ```
    
  • 添加文字

    generate.addEventListener('click', () => {
        let isR = isRight();//文字内容验证函数
        if (isR) {
            ctx.clearRect(0, 0, 750, 1000);//清除画布
            ctx.drawImage(myImg, 0, 10);//重新加载模板,这两个步骤目的是清除之前画的内容
            let str = merchants.value;//输入的内容
            ctx.fillText(str, 375, 460);//填入文字。第一个个参数为 内容,第二个为轴线位置,第三个为y周位置,表现为水平居中
        }
    
    })
    
  • 保存并下载

    ```
    //保存为图片,设置保存格式
    function saveImg(){
        let img_png_src = myCanvas.toDataURL("image/jpeg",1.0);//保存图片格式和质量,0~1,1最大,超过默认为 0.92
        let imgData = img_png_src.replace('jpeg','image/octet-stream');
        let fileName = merchants.value + '.' + 'jpg'; //下载图片的文件名
        // console.log(fileName)
        saveFile(imgData,fileName);//调用保存函数
    }
    
    //下载
    function saveFile(data,fileName){
        let save_link = document.createElement('a');
        save_link.href = data;
        save_link.download = fileName;
        let event = document.createEvent('MouseEvents');
        event.initEvent("click", true, false);
        save_link.dispatchEvent(event);
    }
    
    //保存函数调用
    save.addEventListener('click',()=>{
        saveImg()
    })
    
    ```
    

还存在的问题:

部分浏览器不支持,表现为下载文件为乱码或者文件大小为 0k,下载失败。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
html2canvas是一个JavaScript库,用于在网页上将HTML元素转换为Canvas图像。它可以用于生成海报,将网页内容转换为图像,并以图片的形式进行保存或展示。使用html2canvas,你可以通过将DOM元素传递给html2canvas函数来生成海报。首先,你需要在项目中安装html2canvas库,你可以使用npm或yarn进行安装。在Vue项目中,你可以使用以下命令安装html2canvas:npm install html2canvas。然后,你可以将html2canvas导入到项目中,并使用其提供的功能来生成海报。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [qrcodejs2+html2canvas 生成二维码和海报](https://download.csdn.net/download/qq_39161501/36761918)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [html2canvas海报生成](https://blog.csdn.net/qq_37403179/article/details/116042717)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [html2canvas生成海报的各种问题](https://blog.csdn.net/qq_41913971/article/details/107353958)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值