Please enable Javascript to view the contents

so easy...自制代码截图工具

 ·  ☕ 3 分钟

因为Talk is cheap. Show me the code,写编程的文章,往往都要附上代码片段。

文章中展示代码普遍有3种形式:

  1. 代码文本,通过pre或code标签插入
  2. codepen.io 等工具 或 gist链接
  3. 代码截图

今天讨论的就是第3种——代码截图。


演示

http://codeimg.mzh.ren/


现存工具的问题

现在生成的代码截图的工具很多,效果也很好,深受大家喜爱。我这里列举一些大家比较常用的:

以上工具都非常好用实用,但也有一些缺点:

名字记不住

以上这么多工具,我只能记住codeimg.io,所以我自己写的工具也叫 codeimg:http://codeimg.mzh.ren/。

像最有名的Carbon,它的网页链接是:https://carbon.now.sh/,压根记不住。

虽然可以存储在书签栏,但还增加了查找成本。

丢失编辑器代码样式

其实我们每天用的代码编辑器的主题,应该就是我们比较习惯的代码高亮、配色、风格等。

然而从编辑器拷贝到网页版的工具中,编辑器的样式就不翼而飞了,取而代之是工具提供样式。

如果你的博客是深色风格,你需要代码截图是浅色风格,默认的风格如果是深色,就冲突了。

所以还要花时间去选择适当的风格,增加了时间成本。

功能不全

对,功能不全。

大部分工具都有核心功能,如格式化、外框、语法高亮等。

但总会丢一些小功能,如文件标题、水印、字体大小等。如Carbon就没有水印。

配置复杂且配置不持久

有些工具非常复杂,把所有细节都配置化了。如:codeimg.io。

好不容易配置好样式、水印等,结果下次打开,又得重新配置,闹心!

并且,大而全的工具,加载相对较慢。

适用性不强

有些工具作为vscode的插件,但该插件又不一定会有pycharm或idea的版本。

网页版的适用性强一些。


定制代码截图工具

原理

实现代码截图的过程主要为3步:

  1. 在网页中放置(富)文本编辑器(如textarea之类)或代码编辑器
  2. 粘贴入代码
  3. 将页面渲染成图片下载

(富)文本编辑器

在HTML中,任何元素都可以被编辑。为了使元素可编辑,你所要做的就是在html标签上设置"contenteditable"属性,它几乎支持所有的HTML元素。

Content Editable - Web 开发者指南 | MDN

contentEditable也是大家最为喜闻乐见的富文本编辑器实现方案,部分基础功能由浏览器实现。

这种方式能记住源格式的样式,如设置元素#editor-content的contentEditable属性为true,结合样式,就能产生一个编辑器。

再将该编辑的html源码粘贴上去,就达到以下效果:

html2canvas

html2canvas - Screenshots with JavaScript

html2canvas.js是一个将html dom转化成图片的 js 类库。

该js 类库通过读取 DOM 和应用元素上的样式,将当前页面呈现为画布图像。

它不需要来自服务器的任何渲染,因为整个图像是在客户端的浏览器上创建的。但是,正因为它严重依赖於浏览器,因此该库不适合在 nodejs 中使用。它也不会神奇地绕过任何浏览器内容策略限制,因此呈现跨域内容将需要代理才能将内容获取到相同的来源。

实现代码

通过reactjs构建了一个小网页。

App.js

样式文件App.css

界面效果如下,真是一言难尽…

贴入代码,点击下载按钮,调用codeimg的方法,即可下载。

其中CodeImg.js即是对html2canvas.js进行简单封装:

实现很简单,脏活累活全被html2canvas.js干完了,感谢它。

希望能为你提供思路,定制属于自己的代码截图工具!

 

CodeImg 代码截图 by 码中人

http://codeimg.mzh.ren/

分享

码中人
作者
码中人
Web Developer