html2canvas踩坑记

官网:http://html2canvas.hertzen.com/

首先引入html2canvas

npm install html2canvas --save

然后再需要的页面引入

import html2canvas from 'html2canvas';

html2canvas使用稍微比较简单一点,就是在html中,找到最外层的元素,给一个class或者id即可导出,但是需要注意的是网络图片跨域问题,这时候是需要配置useCORS元素的。

代码示例:

<view id="canvas">
    <img src="/static/logi.png">
    <view style="color:red;">测试HTML</view>
</view>

//uniapp使用的语法,可迁移到vue中

getPicH5(id){
    uni.showLoading({
        title:"正在生成中..."
    })
    var copyDom = document.querySelector('#'+id);
    const width = copyDom.offsetWidth;  // 可见屏幕的宽
    const height = copyDom.offsetHeight;  // 可见屏幕的高
    // 将Canvas画布放大scale倍,然后放在小的屏幕里,解决模糊问题
    html2canvas(document.querySelector('#'+id), {
        width:width,
        heigth:height,
        scrollX:0,
        scrollY:0,
        y:0,
        useCORS: true,
        scale: 3,
        taintTest:true,
    }).then((canvas) => {
        var url = canvas.toDataURL();//图片地址
        uni.previewImage({
            urls:[url]
        })
        uni.hideLoading();
        uni.hideLoading();
    }).catch((err) => {
        console.log(err);
        uni.showToast({
            title:JSON.stringify(err),
            icon:"none"
        });
    })
}

这里会遇到一个比较坑的问题就是苹果手机出现偏移现象,这时候需要用到“y”的值来配置。

*可直接用我上面的方法来生成图片,不会出现偏移现象,亲测苹果安卓也可以。

若出现图片模糊问题,则将模糊的图片放大2倍即可

就是在图片外层包一个view,然后view是图片的正常尺寸,然后image标签的宽高是原来的2倍,再缩小,这样图片就不会模糊了。

.qrcode{
    view{
        width: 216rpx;
        height: 216rpx;
        overflow: hidden;
        margin: 0 auto;
        image{
            width: 432rpx;
            height: 432rpx;
            transform: scale(0.5);
            margin-left: -108rpx;
            margin-top:-108rpx;
        }
    }
}

html2canvas不支持border的虚线

这时候可以利用background属性来实现虚线

div{
    width: 100%;
    height: 1px;
    background-image: linear-gradient(to right, #ccc 0%, #ccc 50%, transparent 50%);
    background-size: 8px 1px;
    background-repeat: repeat-x;
}

html2canvas line-through不生效问题

解决办法也很简单,将文本元素设置成relative相对定位,然后应用伪元素模拟一下就好了,less代码如下:

&:after { 
    position: absolute; 
    width: 100%; 
    height: 1px; 
    top: 50%; 
    left: 0; 
    content: ''; 
    background-color: #999;
}

html2canvas苹果手机不支持base64问题

由于图片跨域访问等问题,安卓手机可以将图片转成base64放到img标签上面即可。

但是苹果手机有可能会出现不支持base64的问题,这时候有2个方法解决:

①可以直接使用http或者https链接(若跨域则不能直接使用);

②或者如果是uniapp的话也可以使用uni.downloadFile的方法先将下载下载,然后将路劲放到图片标签上面即可。若是vue则可以利用ajax来先读取图片流然后再放到图片上面。

这里是html2canvas网上记载的一些问题总结

https://www.cnblogs.com/padding1015/p/9225517.html

html2canvas高版本ios不能生成给图片

一、问题描述

最近在开发 html2canvas 的时候,突然发现,html2canvas在IOS13.4.1系统中调用失败。后马上去github上查看是否有同道中人遇到类似问题。

参考链接:https://github.com/niklasvh/html2canvas/issues/2229

二、解决方案

1.首先将 package.json 中的 html2canvas 版本降低为【1.0.0-rc.4】

版本降低方法

首先移除 html2canvas 【npm uninstall html2canvas】

然后安装指定版本 【npm install --save html2canvas@1.0.0-rc.4

dependencies": {
    "html2canvas": "^1.0.0-rc.4",
    "less": "^3.11.1",
    "less-loader": "^4.1.0",
    "vue": "^2.5.2",
    "vue-router": "^3.0.1"
},

2.如果上述无法解决你的问题 再进行第2步

先点下方的参考链接下载修复过的html2canvas.js文件,在按下面的方法改代码

// 修改后代码 主要将 html2canvas 修改为 (window.html2canvas || html2canvas)

(window.html2canvas || html2canvas)(this.$refs.htmlCanvas, {
        backgroundColor: null
    }).then((canvas) => {
        let dataURL = canvas.toDataURL("image/png");
        this.shareImgUrl = dataURL;
        console.log(this.dataURL)
    });
}

参考链接:https://github.com/FEA-Dven/html2Canvas

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值