这篇文章介绍了如何使用Hexo下的Butterfly主题生成封面图片的主色,并将其作为文章封面顶图。教程中详细介绍了如何修改主题文件和引入css和js来实现这个功能。需要使用七牛云图床或其他提供纯色API的图床来完成。
此内容根据文章生成,并经过人工审核,仅用于文章内容的解释与总结
投诉说在开头
- 本教程只介绍Hexo下的Butterfly主题的方案,其他可供参考,通用性强。
- 需要七牛云图床,其他图床需能提供纯色API,使用方法雷同(使用js计算可能涉及到跨域等诸多问题)
此处应已有90%的小伙伴关闭网页
修改主题结构
原有主题对seo的优化很不友好,文章页的图片不是使用img
标签来写的,而是填充了一个背景。这样做的坏处就是在搜索引擎收录你的网站的时候,大概率不会将你设置好的封面图作为搜索引擎直接显示的封面。解决办法就是新做一个img标签。
新建一个img
标签还有一个好处就是方便我们做我们想要的提取主颜色这个过程。
修改主题文件
主题文件目录为:layout/includes/header/index.pug
打开这个文件,我们来将原有page-header
部分修改为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| header#page-header(class=isHomeClass) img#post-cover(src=url_for(top_img) alt='cover') !=partial('includes/header/nav', {}, {cache:theme.fragment_cache}) if top_img !== false if is_post() include ./post-info.pug else if is_home() #site-info h1#site-title=site_title #site-subtitle span#subtitle if(theme.social) #site_social_icons !=fragment_cache('social', function(){return partial('includes/header/social')}) #scroll-down i.fas.fa-angle-down.scroll-down-effects else #page-site-info h1#site-title=site_title
|
引入css
其中我们可以看到我们新建一个img标签,并且把原来作为填充的img图像给删掉了。这么做之后我们需要调整一下布局。我们引入一个css
如下:
1 2 3 4 5
| .post-bg #post-cover{ width: 100%; height: 100%; object-fit: cover; }
|
样式可以添加到任何可以放置的位置。我外部引用了一个css
,所以将这个样式保存在我外置的样式中。
引入js
思路就是我们首先需要请求一下图片的url地址,然后请求到rgb的值,最后在放置到页面上。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| var path = document.getElementById("post-cover").src; console.log(path); if(path !== 'https://blog.zhheo.com/null'){ var httpRequest = new XMLHttpRequest(); httpRequest.open('GET', path + '?imageAve', true); httpRequest.send(); httpRequest.onreadystatechange = function () { if (httpRequest.readyState == 4 && httpRequest.status == 200) { var json = httpRequest.responseText; var obj = eval('(' + json + ')'); var value = obj.RGB; value ="#" + value.slice(2) document.styleSheets[0].addRule('#page-header:before','background: '+ value +'!important'); } }; }else{ document.styleSheets[0].addRule('#page-header:before','background: none!important'); }
|
很单纯的请求,用其他方式可以自行探索。
大功告成!