
博客魔改教程:通过RGB提取主题色实现深色模式背景效果
文章摘要
MxGPT
下面的文章讲述了如何使用Hexo下的Butterfly主题生成封面图片的主色,并且将其作为文章封面顶图。教程中详细讲述了如何修改主题文件和引入css和js来实现这个功能。同时介绍了rgbaster、腾讯API方式进行改造,同时也可以使用七牛云或者其它API来实现。
此内容根据文章生成,并经过人工审核,仅用于文章内容的解释与总结
投诉对于这个功能个人感觉也是非常香,不过我后来参照heo方式,改为腾讯云API方式获取RGB了,目前把通过rgbaster和腾讯API方式都分享出来
效果预览
对于提取主题色,看过生成封面图片主色来作为文章封面顶图的文章,无意中看到了一篇帖子是关于这个的,于是便根据这个,加上Heo的教程,便解决了这个问题。
魔改步骤
[新建]themes/butterfly/source/js/rgbaster.min.js
1
!function(n){"use strict";var t=function(){return document.createElement("canvas").getContext("2d")},e=function(n,e){var a=new Image,o=n.src||n;"data:"!==o.substring(0,5)&&(a.crossOrigin="Anonymous"),a.onload=function(){var n=t("2d");n.drawImage(a,0,0);var o=n.getImageData(0,0,a.width,a.height);e&&e(o.data)},a.src=o},a=function(n){return["rgb(",n,")"].join("")},o=function(n){return n.map(function(n){return a(n.name)})},r=5,i=10,c={};c.colors=function(n,t){t=t||{};var c=t.exclude||[],u=t.paletteSize||i;e(n,function(e){for(var i=n.width*n.height||e.length,m={},s="",d=[],f={dominant:{name:"",count:0},palette:Array.apply(null,new Array(u)).map(Boolean).map(function(){return{name:"0,0,0",count:0}})},l=0;i>l;){if(d[0]=e[l],d[1]=e[l+1],d[2]=e[l+2],s=d.join(","),m[s]=s in m?m[s]+1:1,-1===c.indexOf(a(s))){var g=m[s];g>f.dominant.count?(f.dominant.name=s,f.dominant.count=g):f.palette.some(function(n){return g>n.count?(n.name=s,n.count=g,!0):void 0})}l+=4*r}if(t.success){var p=o(f.palette);t.success({dominant:a(f.dominant.name),secondary:p[0],palette:p})}})},n.RGBaster=n.RGBaster||c}(window);
引入js
1
2
3
4
5
6inject:
head:
# - <link rel="stylesheet" href="">
bottom:
+ - <script src="/js/rgbaster.min.js"></script>使用
对于使用,就是调用这个js,然后根据提取出来的图片设置博客的主题色就可以了,但是由于图片提取出来的颜色可能会太浅等原因,需要特殊处理下。对于里面的addRule
设置变量颜色需要自行去修改。
引入如下自定义js,你可以选择新建一个自定义的js文件,也可以在自己原本的自定义文件中使用。对于引入的文件需要保证在引入上述文件之后引入。
1 | // 封面纯色 |
由于我使用的是腾讯云COS,正好也提供了这个API,果断使用上,当然像七牛云也有,实现方式大同小异
1 | function coverColor () { |
由于此代码是根据本人博客结构实现的,不一定在您的博客上可以生效,如果有什么问题,相信您可以自行调试成功解决。
- 感谢你赐予我前进的力量
打赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用CC BY-NC-ND 4.0协议,完整转载请注明来自满心记
评论
匿名评论
隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果