惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Threat Research - Cisco Blogs
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
月光博客
月光博客
V
Vulnerabilities – Threatpost
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
S
Secure Thoughts
Microsoft Azure Blog
Microsoft Azure Blog
Blog — PlanetScale
Blog — PlanetScale
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
T
Tailwind CSS Blog
S
SegmentFault 最新的问题
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
云风的 BLOG
云风的 BLOG
The Last Watchdog
The Last Watchdog
L
LINUX DO - 热门话题
酷 壳 – CoolShell
酷 壳 – CoolShell
WordPress大学
WordPress大学
AWS News Blog
AWS News Blog
美团技术团队
G
Google Developers Blog
宝玉的分享
宝玉的分享
www.infosecurity-magazine.com
www.infosecurity-magazine.com
C
CXSECURITY Database RSS Feed - CXSecurity.com
Recent Commits to openclaw:main
Recent Commits to openclaw:main
I
InfoQ
小众软件
小众软件
Google DeepMind News
Google DeepMind News
P
Privacy & Cybersecurity Law Blog
Stack Overflow Blog
Stack Overflow Blog
Webroot Blog
Webroot Blog
D
DataBreaches.Net
IT之家
IT之家
PCI Perspectives
PCI Perspectives
人人都是产品经理
人人都是产品经理
Hacker News: Ask HN
Hacker News: Ask HN
L
LangChain Blog
SecWiki News
SecWiki News
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Cisco Blogs
T
Threatpost
P
Proofpoint News Feed
Y
Y Combinator Blog
Cloudbric
Cloudbric
T
Tor Project blog
量子位
博客园_首页
B
Blog
Hugging Face - Blog
Hugging Face - Blog
GbyAI
GbyAI
D
Darknet – Hacking Tools, Hacker News & Cyber Security

三省吾身丶丶

从一个简单功能的实现,谈谈 react 中的逻辑复用进化过程 在 vue 中使用 jsx 与 class component 的各种姿势 使用 generic-pool 优化 puppeteer 并发问题 再谈中文字体的子集化与动态创建字体 《张乌梅的日记》摘录 一个使用 react 的思想去使用 vue 的方式 React 项目构建 从一个简单的实例看 JavaScript 的异步编程进化历 webpack入坑之旅(零)简介与升级 中文播客推荐 学习 Promise,掌握未来世界 JS 异步编程基础 2017 杭州 nodeParty 记录 从零学习 canvas (一) 浅谈 electron 中的 session 管理(隔离) FlexBox 布局详解 HTML5常用标签分类 ES6 简单特性学习记录 一张图学习 ES6 中的 React 生命周期与流程 2017,一切才刚刚开始。
一次canvas中文字转化成图片后清晰度丢失的探索
guowenfh · 2018-03-05 · via 三省吾身丶丶

本文最初记录在 2017 年 D2 期间。知乎问题为:参加第12届D2前端技术论坛,你有什么收获?
主要是想说一下百度的小姐姐分享的话题 《打造前端复杂应》。

最近正好接手了这样一个类似的项目,(百度 h5 百度脑图)不过整体全是基于 canvas 的,而且也没有事件广播,没有数据驱动,没有模型,全是直接 jquery 直接操作 DOM 的。整体感觉很混乱。现在一个人维护,改起来,感觉很忧伤。

不过听完分享之后,不管是事件广播,还是直接数据的双向绑定,都让我多了很多思路去改造。目前第一步就是先加入了 webpack、ES6、React、PubSub ,先把之前的 jquery 逐渐干掉吧。


不过小姐姐提到百度脑图 和 百度 H5 分别使用 SVG 以及 原生 DOM 来实现的,这样当然没什么问题,不过也提到为什么没用 canvas 的原因,主要是 事件绑定,元素选择相关的等等一些方面的考虑。

但是实际上,根据我项目的使用来说,直接使用 canvas 也是可以的,基本能解决掉提出来的顾虑,当然主要是有这个强大的开源 canvas 操作库:

fabric.js: Javascript Canvas Library, SVG-to-Canvas (& canvas-to-SVG) Parser

事件,动画,选中,变换,loadJOSN(),toJSON() 。强大之处,不太好用几句话说清楚,部分功能如下图,建议官网体验:


上面一堆都是废话。

下面是想要说的一个问题,本来想在现场提出来的,但是没被点名到。不过有一个小哥提到了百度 H5 在导出图片的清晰度的问题,说截图都比导出的图片清晰,然后每次做完都只能手动截图。。
我遇到的也类似。不过,经过排除主要聚焦在字体。(其实我觉得那个小哥,也应该是图片中的字体不够清晰)

在将 dom / canvas 生成图片时,都会发现其中的文本在不同系统平台下有着非常大的清晰度差异(和所选的字体也有一定相关)。(说到字体,就会谈到中文字体的子集化,和 WebFont 动态生成这个也很有意思。推荐一个开源库font-carrier:很久没更新了,依赖被写死,需慎重。 这里不谈)

下图有四种图片生成方式: 本地 qq 截图;psd 导出; mac phantomjs 网页截图 ; CentOS phantomjs 网页截图。(未按顺序,清晰度各有不同,最底部是一行是图片),查看大图。。

相信可以很清楚的看出来其中存在的巨大差异。。。

。。。。在排除 phantomjs 配置问题,已经字体是否生效的问题。。(也试了在 window 下使用 phantomjs 网页截图 效果更差。)

最后在我这里给出的结论就是生成图片的清晰度主要受两方面影响(其实浏览器也一样?):

1. 不同的操作系统底层对于字体的渲染原理和方式差异。
2. 字体原本选用的字体生成类型 TrueType / OpenType 等特性差异

然后问题暂时在我这到此为止了。以上两个问题,我目前的能力都还解决不了。。。
欢迎打脸。。。也欢迎有类似问题的一起聊聊


2018-03-05 记录 上面清晰度的问题已经解决。

  1. 同时购入 mac serverwindows server 用于图片生成。 ( mac 的文字显示效果与 mac 电脑的一致。(相对于 windows 来说 加黑加粗了
  2. 弃用了 phantomjs 改用 google 出品的 Puppeteer。
  3. 截图选项使用 png (即使是 quality 100 的 jpg 仍旧渲染会有问题。如果 png 文件过大, 再使用 imagemagick / GraphicsMagick 进行压缩。