balabala: dom 转图片方案

简介: 有一天张大胖接到了产品的一个需求,需求中涉及到了小程序 和 app 两端。

有一天张大胖接到了产品的一个需求,需求中涉及到了小程序 和 app 两端。

主要是基于微信的一个活动,需要在 app 和小程序端生成带二维码的图片,生成图片是为了让用户可以发到朋友圈。然后用户长按带二维码的图片就可以进入到小程序了。


大胖想着生成图片也是后端把多个小图进行拼接,根本不需要前端搞,前端也搞不了这玩意,太麻烦。


后来对需求的时候,发现后端可以做但是处理起来很麻烦,需要对每个元素的坐标位置进行计算,然后绘图,甚是麻烦,而且需要对图片进行拼接生成,比较耗时。想问下前端能不能实现?


大胖反应倒是快,说前端这个也不好弄,也是需要进行坐标计算和适配,而且我们小程序做了也只能小程序用,那 app 端怎么办?


后端同学开始了各种讨论,能不能简化下UI,能不能改下展示的布局,尽量好搞一些。


此时大胖呆在一旁,好像在思考什么。他在想有没有一种通用的方案,不管页面的多么复杂都可以搞定。突然大胖拍着大腿 “啪” 的一声,信心满满的说,有办法了,而且页面不管页面多复杂都可以搞定。


大胖这个没心没肺的,嘴太快了,自己又给自己找事儿干了。因为这个方案实施起来有点复杂。


会后大胖对自己所知道的可以把动态网页转成图片的方案详细的对比了下


1. html2canvas


   相信大家都知道这个,这是一个浏览器端的 js 库,可以把 dom结构转成图片。页面布局随便写,但是只能用于浏览器端。

89e268982236a3dca2caae09292720b5_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

2. 后端生成



可以让后端 php、java 等在服务端进行图片拼接,然后把组合后的图片地址给到前端。


优点是可以做到通用,小程序、app等其他端都可以调用同一个图片接口。


缺点是服务端处理简单图片文字拼接可以,但是如果是针对一个复杂的网页布局可能就有点力不从心了。


3. 小程序端生成


例如微信小程序官方提供了canvas 的相关文档调用说明,也可以通过计算坐标的方式把图片和文字画上去。然后把canvas保存成图片,再下载到用户手机。

此方案和后端生成差不多。


4. phantomjs



这个库相信很多同学没接触过,但确实真的强大。他就是一个运行在服务端的无界面的浏览器。

咱们看看官方怎么介绍的:

 PhantomJS是一个基于webkit的JavaScript API。它使用QtWebKit作为它核心浏览器的功能,使用webkit来编译解释执行JavaScript代码。任何你可以在基于webkit浏览器做的事情,它都能做到。它不仅是个隐形的浏览器,提供了诸如CSS选择器、支持Web标准、DOM操作、JSON、HTML5、Canvas、SVG等,同时也提供了处理文件I/O的操作,从而使你可以向操作系统读写文件等。PhantomJS的用处可谓非常广泛,诸如网络监测、网页截屏、无需浏览器的 Web 测试、页面访问自动化等。


需要在服务端进行截屏,所以还需要一个可以访问的h5页面,另外页面必须是服务端渲染,最好不要用js渲染,截图可能有问题。


另外一个在服务端的字体需要预先设置,比如微软雅黑、 华文苹方 服务器上如果没有就需要进行安装。不然截图的字体和你的效果图不一致。


优点是 服务端截屏,可以做成通用的服务。

缺点就是 会增加前端同学的工作量,因为需要做服务,还需要做h5页面布局。当然也看怎么设计架构,如果足够通用也只需要写一次就够了。剩下的就是做h5页面了,这个就快多了。


看看官网的代码:

3bd2b1c8aa9c464d3eabb2502688b79c_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


最后


其实服务端生成图片的方法也不只这两种,服务端也有很多三方的库。这里就不多说了,大胖也不是很熟悉。

接下来大胖就用了最后的方案  - PhantomJS,去实施。

他的工作量增加了不少,任务有没有完成?

PhantomJS有没有什么坑呢?

咱们下回再说。

朋友们给大胖加油吧。

目录
相关文章
|
存储 前端开发 JavaScript
HTML中dom转成图片进行存储
做作业的时候,需要在手机上预览下,但是发现如果想在移动端上展示A4样子的作业还是挺麻烦的,最后还是准备通过图片来展示,然后移动端缩放呗。。
HTML中dom转成图片进行存储
|
4月前
|
JavaScript 测试技术
html2canvas将document DOM节点转换为图片,并下载到本地
html2canvas将document DOM节点转换为图片,并下载到本地
|
JavaScript 前端开发
vue 使用html2canvas将DOM转化为图片
一、前言 我发现将DOM转化为图片是一个非常常见的需求,而自己手动转是非常麻烦的,于是找到了html2canvas这个插件,既是用得比较多的也是维护得比较好的一个插件。
1796 0
|
JavaScript 前端开发
javascript dom的图片最终版源代码 (重复看)
html代码: Image Gallery Snapshots ...
1027 0
|
1月前
|
JavaScript 前端开发
JavaScript操作DOM元素
JavaScript操作DOM元素
12 1
|
1月前
|
JavaScript 前端开发
如何使用 JavaScript 操作 DOM?
如何使用 JavaScript 操作 DOM?
13 0
|
4天前
|
JavaScript 前端开发 UED
深入解析JavaScript原生操作DOM技术
【4月更文挑战第22天】本文深入探讨JavaScript原生DOM操作技术,包括使用`getElement*`方法和CSS选择器获取元素,借助`createElement`与`appendChild`动态创建及插入元素,修改元素内容、属性和样式,以及删除元素。通过掌握这些技术,开发者能实现页面动态交互,但应注意避免过度操作DOM以优化性能和用户体验。
|
11天前
|
存储 JavaScript 前端开发
JavaScript DOM 操作:解释一下 cookie、sessionStorage 和 localStorage 的区别。
Cookie是服务器发送至客户端的文本信息,会随每个请求发送回服务器,适合控制会话状态但可能暴露隐私。SessionStorage仅在当前会话中存储数据,关闭浏览器后清除,适合临时存储如登录状态。LocalStorage则持久保存数据,即使关闭浏览器也不会清除,适用于存储长期设置。三种方式各有侧重,应按需求选择。
15 0
|
11天前
|
JavaScript 前端开发 安全
JavaScript DOM 操作:解释一下浏览器的同源策略。
**同源策略**是浏览器安全基石,它阻止脚本跨不同协议、域名或端口访问资源,防止恶意行为。例如,HTTP页面无法直接用JS获取HTTPS页面内容。**CORS**允许跨域请求,但需服务器配合设置,通过`document.domain`属性可配置,但仍受限于服务器配置。
14 4
|
24天前
|
JavaScript 前端开发
深入了解 JavaScript 中的 DOM 和 BOM
深入了解 JavaScript 中的 DOM 和 BOM
18 4