Html5 Canvas生成海报功能代码

海报用来做引流推广都是非常方便的,所以我们可以使用Canvas快速绘制海报,下面是我写的一个实例,希望对大家有帮助。

HTML代码:

<canvas id="myCanvas"></canvas>

JS代码:

<script type="text/javascript">
    var c = document.getElementById("myCanvas"); // 使用id来寻找canvas元素
    var cxt = c.getContext("2d"); // 创建context对象

    // 设置myCanvas的宽高
    c.width = 320; //设置myCanvas的宽
    c.height = 580; //设置myCanvas的高

    // 绘制一个矩形,用来做全局背景颜色
    cxt.fillStyle = "#fff"; // fillStyle方法将其染成红色
    cxt.fillRect(0,0,c.width,c.height); // fillRect方法是创建一个矩形,x坐标、y坐标、宽度、高度

    // 把图片绘制到myCanvas
    var img = new Image()
    img.src = "imgdemo.jpg" // 图片路径

    // 为了防止图片还没加载完成就执行drawImage,需要延迟10ms再执行drawImage
    setTimeout(function(){
        cxt.drawImage(img,20,20,280,280);
    },10)

    // 绘制商品标题,自动换行
    cxt.fillStyle="#333";
    cxt.font = "15px bold 黑体";
    var str = "火山泥岩洗面奶男士专用控油祛痘去黑头去油除螨虫学生补水洁面乳【包邮】"
    cxt.textBaseline = "middle";
    cxt.textAlign = "left";
    var lineWidth = 0;
    var canvasWidth = 280;//一行文字占用的宽度
    var initHeight=320;//绘制字体距离canvas顶部初始的高度
    var lastSubStrIndex= 0; //每次开始截取的字符串的索引
    for(let i=0;i<str.length;i++){ 
        lineWidth+=cxt.measureText(str[i]).width; 
        if(lineWidth>canvasWidth){  
            cxt.fillText(str.substring(lastSubStrIndex,i),20,initHeight);//绘制截取部分
            initHeight+=20; //20为字体的高度
            lineWidth=0;
            lastSubStrIndex=i;
        } 
        if(i==str.length-1){ //绘制剩余部分
            cxt.fillText(str.substring(lastSubStrIndex,i+1),20,initHeight);
        }
    }

    // 绘制券后价底部背景色
    cxt.fillStyle = "#ff0036"; // fillStyle方法将其染成红色
    cxt.fillRect(220,360,80,40); // fillRect方法是创建一个矩形,x坐标、y坐标、宽度、高度

    // 绘制券底部背景色
    cxt.fillStyle = "#ff0036"; // fillStyle方法将其染成红色
    cxt.fillRect(20,360,150,40); // fillRect方法是创建一个矩形,x坐标、y坐标、宽度、高度

    // 绘制价格
    cxt.fillStyle="#fff";
    cxt.font = "normal bold 20px 黑体";
    var str_price = "券后价 ¥32.90"
    cxt.textBaseline = "middle";
    cxt.textAlign = "left";
    cxt.fillText(str_price,26,380);

    // 绘制券面值
    cxt.fillStyle="#fff";
    cxt.font = "normal bold 15px 黑体";
    var str_quan = "券 ¥9.90"
    cxt.textBaseline = "middle";
    cxt.textAlign = "left";
    cxt.fillText(str_quan,230,380);

    // 绘制二维码
    var qrcode = new Image()
    qrcode.src = "qrcode.png" // 二维码图片路径

    // 为了防止图片还没加载完成就执行drawImage,需要延迟10ms再执行drawImage
    setTimeout(function(){
        cxt.drawImage(qrcode,95,420,130,130);
    },10)
</script>

效果图:

Html5 Canvas生成海报功能代码

「点点赞赏,手留余香」

3

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本站所有资源及文章均来源于网络及用户分享或为本站原创,仅限用于学习和研究,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
码云笔记 » Html5 Canvas生成海报功能代码

10 评论

  1. 楼主是否在本站的前端开发QQ群:565733884?

  2. 这个html文件没有引用jQuery,其他文件有

  3. 考虑到生成海报,用html2canvas在右下角动态生成一个二维码,方便扫码直接进入链接。

    1. 我这个最下边还有个二维码路径,你改了没,至于你用的那个插件我还没用过,我下去帮你研究一下

    2. html2canvas 这是个屏幕截图工具,这好像不符合你需求

  4. 主要代码如下:

    .but_box{…}

    生成我的海报

    bui.ready(function(){
    $(‘#test_haibao_id’).click(function(){
    //上面第二段比较长的代码(图片路径已修改)
    )}
    })

  5. 单独把以上代码拷贝到html文件,已经修改了代码中的图片路径,但不显示效果图。是我缺少什么代码吗?多谢!

    1. 你确定吗?我刚测试了一下可以呀

发表评论

IT互联网行业相关广告投放 更专业 更精准

立即查看 联系我们