首页前端开发HTML移动端H5页面实现生成图片的代码

移动端H5页面实现生成图片的代码

时间2024-01-23 15:07:18发布访客分类HTML浏览793
导读:收集整理的这篇文章主要介绍了移动端H5页面实现生成图片的代码,觉得挺不错的,现在分享给大家,也给大家做个参考。本篇文章给大家带来的内容是关于移动端H5页面实现生成图片的代码,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。1、...
收集整理的这篇文章主要介绍了移动端H5页面实现生成图片的代码,觉得挺不错的,现在分享给大家,也给大家做个参考。本篇文章给大家带来的内容是关于移动端H5页面实现生成图片的代码,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

1、生成图片可以用canvas,但是由于已经有了htML2canvas这个开源库,所以为了节省时间就没有自己写了

    /**     * 根据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的宽和高。想想为什么要这么写?最后在绘制的饿时候将所绘制的内容放大像素比倍

举个例子iphone6S是设备宽高是375 X 667 ,6S的 window.devicePixelRatio = 物理像素 / dips(2=750/375)所以设计师一般给你的设计稿是不是都是750*1334的?

所以如果按照一比一去绘制在高清屏下就会模糊,看图说话6S DPR=2

6plus DPR=3

4.最后调用canvas.toDataURL("image/png"); 赋值给image.src,由于微信里面无法保存图片,所以只能生成图片文件,调用微信自带的长按保存到图片到相册功能,如图:


相关推荐:

HTML5 canvas用来绘制弧形的代码实现

html5 video如何实现实时监测当前播放时间(代码)

html5移动端Meta的设置

以上就是移动端H5页面实现生成图片的代码的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

html5

若转载请注明出处: 移动端H5页面实现生成图片的代码
本文地址: https://pptw.com/jishu/584343.html
HTML5应用:离线的应用以及存储的应用 HTML5 canvas实现中奖转盘的实例代码

游客 回复需填写必要信息