可能有观众已经发现了(虽然我觉得这个博客没有其他人关注),Soptlog 在上一个版本中所有文章中的图片左下角都有一个水印。而在这个版本所有的水印又都被去除了。起初加水印的动机很简单,一是为了测试一下 Ruby 调用 Nodejs 的能力,二是我发现有个博客在复制粘贴我的内容,还没有申明来源,所以就想用水印的方式来「显示主权」。现在看来还是不适合我。
实现方式#
考虑到以后可能有小伙伴想要实现相似的功能,我还是简单简述一下 Jekyll 实现编译时生成水印图片的方法。
首先原则就是,编译后图片变成什么样我不管,但你不能动我原本的图片。 所以批量对原图加水印就行不通了,只能在 Jekyll 生成站点的过程中处理图片。所以关键 Hook 的方法就是 Jekyll::StaticFile
里的 copy_file(dest_path)
方法,这个方法的主要功能是将静态文件从原地址拷贝到站点地址 _site/
。我们只需要在这个过程中拦截所有的图片,然后用我们的方法去拷贝就行了。
考虑到 Ruby 的图像处理基本靠 imageMagick
,我又不是很想每次远程 CI 都安装个有些「重」的库,所以图片处理主要是在 Nodejs 里用 Sharp
写的。
Ruby 的调用主要是靠 SystemCall
,所以其实是比较慢的,我之后想到了更好的方法再来补充。SystemCall
太慢了,后来改成了 Socket
调用,瞬间速度快了 8 倍。
为什么不适合我#
我是颜值控,加个水印实在是 太难看了。
变通的方法#
水印我还是想加的,但要「十分优雅地加」。我目前在考虑隐写,有可能会实现一个自己的加密算法。日后有了进度再来补充。 现在的实现方式是在编译过程中对图片做隐写。