可能有观众已经发现了(虽然我觉得这个博客没有其他人关注),Soptlog (也就是你正在看的这个博客) 在上一个版本中所有文章中的图片左下角都有一个水印。而在这个版本所有的水印又都被去除了。起初加水印的动机很简单,一是为了测试一下 Ruby 调用 Nodejs 的能力,二是我发现有个博客在复制粘贴我的内容,还没有申明来源,所以就想用水印的方式来「显示主权」。现在看来还是不适合我。

实现方式

考虑到以后可能有小伙伴想要实现相似的功能,我还是简单简述一下 Jekyll 实现编译时生成水印图片的方法。

首先原则就是,编译后图片变成什么样我不管,但你不能动我原本的图片。 所以批量对原图加水印就行不通了,只能在 Jekyll 生成站点的过程中处理图片。所以关键 Hook 的方法就是 Jekyll::StaticFile 里的 copy_file(dest_path) 方法,这个方法的主要功能是将静态文件从原地址拷贝到站点地址 _site/。我们只需要在这个过程中拦截所有的图片,然后用我们的方法去拷贝就行了。

考虑到 Ruby 的图像处理基本靠 imageMagick,我又不是很想每次远程 CI 都安装个有些「重」的库,所以图片处理主要是在 Nodejs 里用 Sharp 写的。

Ruby 的调用主要是靠 SystemCall,所以其实是比较慢的,我之后想到了更好的方法再来补充。 SystemCall 太慢了,后来改成了 Socket 调用,瞬间速度快了 8 倍。

为什么不适合我

我是颜值控,加个水印实在是 太难看了。

变通的方法

水印我还是想加的,但要「十分优雅地加」。我目前在考虑隐写,有可能会实现一个自己的加密算法。日后有了进度再来补充。



发现存在错别字或者事实错误?请麻烦您点击 这里 汇报。谢谢您!