千家信息网

html移动端中怎么解决生成图片问题

发表于:2025-02-14 作者:千家信息网编辑
千家信息网最后更新 2025年02月14日,这篇文章主要介绍"html移动端中怎么解决生成图片问题",在日常操作中,相信很多人在html移动端中怎么解决生成图片问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"h
千家信息网最后更新 2025年02月14日html移动端中怎么解决生成图片问题

这篇文章主要介绍"html移动端中怎么解决生成图片问题",在日常操作中,相信很多人在html移动端中怎么解决生成图片问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"html移动端中怎么解决生成图片问题"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1.生成图片可以用canvas,但是由于已经有了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.widthcanvas.height 去乘以设备像素比 也就是 scaleBy; 这个时候在去设置canvas.style.widthcanvas.style.heightdom的宽和高。想想为什么要这么写?最后在绘制的饿时候将所绘制的内容放大像素比倍

举个例子iphone6S是设备宽高是375 X 667 ,6S的 window.devicePixelRatio = 物理像素 / dips(2=750/375)所以设计师一般给你的设计稿是不是都是750*1334的?所以如果按照一比一去绘制在高清屏下就会模糊

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

到此,关于"html移动端中怎么解决生成图片问题"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0