手机端将html页面变成图片,移动端Html5页面如何生成图片

移动端Html5页面如何生成图片

发布时间:2020-10-10 18:55:29

来源:亿速云

阅读:78

作者:小新

这篇文章主要介绍了移动端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的宽和高。想想为什么要这么写?最后在绘制的饿时候将所绘制的内容放大像素比倍

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

f0e15b8abd36d71e3b9f555a855e1075.png

6plus DPR=3

8a41f1dcbbc84d1ac04efa364855df54.png

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

cfbdef764e2c8b574756a7f8f53bf630.png

感谢你能够认真阅读完这篇文章,希望小编分享移动端Html5页面如何生成图片内容对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,遇到问题就找亿速云,详细的解决方法等着你来学习!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值