百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>html5教程> 挪移端Html5页面生成图片解决方案-
分享文章到:

挪移端Html5页面生成图片解决方案-

发布时间:09/01 来源:未知 浏览: 关键词:
此刻有许多微信民众号经营流动,都有生成图片的需求,这篇文章主要介绍了挪移端Html5页面生成图片解决方案的相干材料,有一定的参照 价值,有需要的伴侣可以参照 一下,但愿对你们有所帮忙。 此刻有许多微信民众号经营流动,都有生成图片的需求,这篇文章主要介绍了挪移端Html5页面生成图片解决方案的相干材料,有一定的参照 价值,有需要的伴侣可以参照 一下,但愿对你们有所帮忙。

此刻有许多微信民众号经营流动,都有生成图片的需求,生成图片后可以发送给摰友和发到伴侣圈扩散,利于产品的宣扬!

1.生成图片可以用canvas,但是因为已经有了html2canvas这个开源库,所认为了节俭工夫就没有本人写了

github地址: html2canvas

少啰嗦,先看东西!!!

LiveDemo

/**
     * 依据window.devicePixelRatio猎取像素比
     */
    function DPR() {
        if (window.devicePixelRatio && window.devicePixelRatio > 1) {
            return window.devicePixelRatio;
        }
        return 1;
    }
    /**
     *  将传入值转为整数
     */
    function parseValue(value) {
        return parseInt(value, 10);
    };
    /**
     * 绘制canvas
     */
    async function drawCanvas (selector) {
        // 猎取想要转换的 DOM 节点
        const dom = document.querySelector(selector);
        const box = window.getComputedStyle(dom);
        // DOM 节点盘算后宽高
        const width = parseValue(box.width);
        const height = parseValue(box.height);
        // 猎取像素比
        const scaleBy = DPR();
        // 新建自定义 canvas 元素
        var canvas = document.createElement('canvas');
        // 设置 canvas 元素属性宽高为 DOM 节点宽高 * 像素比
        canvas.width = width * scaleBy;
        canvas.height = height * scaleBy;
        // 设置 canvas css宽高为 DOM 节点宽高
        canvas.style.width = `${width}px`;
        canvas.style.height = `${height}px`;

        // 猎取画笔
        const context = canvas.getContext('2d');

        // 将所有绘制内容放大像素比倍
        context.scale(scaleBy, scaleBy);

        let x = width;
        let y = height;
        return await html2canvas(dom, {canvas}).then(function () {
            convertCanvasToImage(canvas, x ,y)
        })
    }

    /**
     * 图片转base64格局
     */
    function convertCanvasToImage(canvas, x, y) {
        let image = new Image();
        let _container = document.getElementsByClassName('container')[0];
        let _body = document.getElementsByTagName('body')[0];
        image.width = x;
        image.height = y;
        image.src = canvas.toDataURL("image/png");
        _body.removeChild(_container);
        document.body.appendChild(image);
        return image;
    }
    drawCanvas('.container')

2.因为此刻的手机都是高清屏,所以要是你不做处置就会涌现依稀的状况,为何会涌现依稀的状况?这个就波及到设施像素比 devicePixelRatio js 供给了 window.devicePixelRatio 可以猎取设施像素比

function DPR() {
        if (window.devicePixelRatio && window.devicePixelRatio > 1) {
            return window.devicePixelRatio;
        }
        return 1;
    }

这个DPR函数就是猎取设施的像素比, 那猎取像素比之后要做什么呢?

var canvas = document.createElement('canvas');
        // 设置 canvas 元素属性宽高为 DOM 节点宽高 * 像素比
        canvas.width = width * scaleBy;
        canvas.height = height * scaleBy;
        // 设置 canvas css宽高为 DOM 节点宽高
        canvas.style.width = `${width}px`;
        canvas.style.height = `${height}px`;

        // 猎取画笔
        const context = canvas.getContext('2d');

        // 将所有绘制内容放大像素比倍
        context.scale(scaleBy, scaleBy);

3.猎取设施像素比之后将canavs.width 和 canvas.height 去乘以设施像素比 也就是 scaleBy; 这个时候在去设定canvas.style.width 和 canvas.style.height 为dom的宽和高。想想为何要这么写?最后在绘制的饿时候将所绘制的内容放大像素比倍

举个例子苹果6S是设施宽高是375 X 667 ,6S的 window.devicePixelRatio = 物理像素 / dips(2=750/375)所以设计师个别给你的设计稿是不是都是750*1334的?所以要是按照一比一去绘制在高清屏下就会依稀,看图语言6S DPR=2

总结:以上就是本篇文的全部内容,但愿能对大家的学习有所帮忙。更多相干教程请拜访Html5视频教程!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有152人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板