html移动端中怎么解决生成图片问题
这篇文章主要介绍“html移动端中怎么解决生成图片问题”,在日常操作中,相信很多人在html移动端中怎么解决生成图片问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”html移动端中怎么解决生成图片问题”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
1.生成图片可以用canvas,但是由于已经有了html2canvas这个开源库,所以为了节省时间就没有自己写了
LiveDemo
/***根据window.devicePixelRatio获取像素比*/functionDPR(){if(window.devicePixelRatio&&window.devicePixelRatio>1){returnwindow.devicePixelRatio;}return1;}/***将传入值转为整数*/functionparseValue(value){returnparseInt(value,10);};/***绘制canvas*/asyncfunctiondrawCanvas(selector){//获取想要转换的DOM节点constdom=document.querySelector(selector);constbox=window.getComputedStyle(dom);//DOM节点计算后宽高constwidth=parseValue(box.width);constheight=parseValue(box.height);//获取像素比constscaleBy=DPR();//创建自定义canvas元素varcanvas=document.createElement('canvas');//设定canvas元素属性宽高为DOM节点宽高*像素比canvas.width=width*scaleBy;canvas.height=height*scaleBy;//设定canvascss宽高为DOM节点宽高canvas.style.width=`${width}px`;canvas.style.height=`${height}px`;//获取画笔constcontext=canvas.getContext('2d');//将所有绘制内容放大像素比倍context.scale(scaleBy,scaleBy);letx=width;lety=height;returnawaithtml2canvas(dom,{canvas}).then(function(){convertCanvasToImage(canvas,x,y)})}/***图片转base64格式*/functionconvertCanvasToImage(canvas,x,y){letimage=newImage();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);returnimage;}drawCanvas('.container')
2.由于现在的手机都是高清屏,所以如果你不做处理就会出现模糊的情况,为什么会出现模糊的情况?这个就涉及到设备像素比 devicePixelRatio js
提供了 window.devicePixelRatio
可以获取设备像素比
functionDPR(){if(window.devicePixelRatio&&window.devicePixelRatio>1){returnwindow.devicePixelRatio;}return1;}
这个DPR函数就是获取设备的像素比, 那获取像素比之后要做什么呢?
varcanvas=document.createElement('canvas');//设定canvas元素属性宽高为DOM节点宽高*像素比canvas.width=width*scaleBy;canvas.height=height*scaleBy;//设定canvascss宽高为DOM节点宽高canvas.style.width=`${width}px`;canvas.style.height=`${height}px`;//获取画笔constcontext=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的?所以如果按照一比一去绘制在高清屏下就会模糊
4.最后调用canvas.toDataURL("image/png")
;赋值给image.src
,由于微信里面无法保存图片,所以只能生成图片文件,调用微信自带的长按保存到图片到相册功能
到此,关于“html移动端中怎么解决生成图片问题”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。