随机图片api————使用与问题
发表于|更新于
|字数总计:1.1k|阅读时长:4分钟|阅读量:
简介
如果你仔细观察,你就会发现本站的所有图片都是随机的
这实际上是我简单写的一个程序
目前是被挂在了 SELV.ES 这个站点上
本api面向四个方向设计,且均来源于p站 AI生成的一些千篇一律的图全部没有收集
当然,api中也是按角色分类的,目前有绪山真寻,和泉纱雾,伊雷娜,后藤一里(波奇),中野三玖,中野五月,樱岛麻衣,血小板(工作细胞),希丝缇娜(小魔禁),土间埋,珈百璃的堕落(系列女主),国家队(Darling in Franxx) 系列女主,事实上都是我看过的番剧中最喜欢的一些角色
程序实现
这里不提供完整代码,提供部分代码,如随机目录名,在目录中随机文件名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| function getRandomFileName($directory) { $mydir = dir($directory); $files = array(); while($file = $mydir->read()) { if(is_dir("$directory/$file")) continue; if($file == ".") continue; if($file == "..") continue; array_push($files, $file); } $mydir->close(); srand((float) microtime() * 10000000); $index = array_rand($files); return $files[$index]; } function getRandomDir($directory) { $dir = scandir($directory); array_shift($dir); array_shift($dir); $key=array_rand($dir,1); $rand_dir=$directory.'/'.$dir[$key]; return $rand_dir; }
|
具体思路就是通过这两个函数,再header输出图片
分类使用
1.正常的明信片图,长图。适合做手机壁纸 点我查看
https://selv.es/random/index.php?param=long
2.背景大图,可作电脑壁纸 点我查看
https://selv.es/random/index.php?param=back
注(2024.2.15加入):形如https://selv.es/random/index.php?param=back&long 等加入long参数代表生成背景图(且有二分之一的概率分别得到大图和长图,这是适用于hexo自动裁剪的背景)
3.头像小图,顾名思义 点我查看
https://selv.es/random/index.php?param=avatar
不过隔壁tsinbei cdn中有种类更多的头像(毕竟这里角色有局限性),详情请见 文档 直接显示请直接访问下列网址
1
| https://api.tsinbei.com/v2/image/acg/?display=1
|
4.获取横图(用于文章封面等),基本都由我从长图裁剪下来【PS:任何参数或没有参数都行】 点我查看
https://selv.es/random/index.php
问题
如果你引用了api发现图片基本相同,重复率高,请按照以下操作进行
转载自 https://blog.mitsumune.top/2023/02/13/hexo_butterfly主题添加对随机图片api的支持/ 在这里致谢
1.打开hexo根目录\themes\butterfly\scripts新建一个random_img.js文件
2.将以下代码复制进random_img.js并保存
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
'use strict'
hexo.extend.filter.register('before_post_render', function (data) { const { config } = this if (config.post_asset_folder) { const imgTestReg = /\.(png|jpe?g|gif|svg|webp)(\?.*)?$/ const topImg = data.top_img const cover = data.cover if (topImg && topImg.indexOf('/') === -1 && imgTestReg.test(topImg)) data.top_img = data.path + topImg if (cover && cover.indexOf('/') === -1) data.cover = data.path + cover }
if (data.cover === false) { data.randomcover = randomCover() return data }
data.cover = data.cover || randomCover() return data },0)
function randomCover () { const theme = hexo.theme.config let cover let num
if (theme.cover && theme.cover.default_cover) { if (!Array.isArray(theme.cover.default_cover)) { cover = theme.cover.default_cover } else { num = Math.floor(Math.random() * theme.cover.default_cover.length) cover = theme.cover.default_cover[num] } } else { cover = theme.default_top_img || 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7' } if(theme.cover.suffix){ if(theme.cover.suffix == 1) cover = cover + ("?" + Math.ceil(Math.random()*10000)) else if(theme.cover.suffix == 2) cover = cover + ("&" + Math.ceil(Math.random()*10000)) } return cover }
|
3.打开butterfly主题配置文件:在cover:插入suffix: 1并保存(目的是在链接后面加入后缀?spm={随机数} 0是不使用后缀、1是?加随机数;2是&加随机数),然后hexo素质三连
4.本思路就是通过get标签得到不同url进行多次请求,避免由于缓存产生的重复图片问题
致谢
在这里感谢清北cdn提供加速服务,清北cdn
也一并感谢p站画师
Todo
本项目从2024/2/13 日晚开始 且短期内不会停止(坚持收集)
1.完成上传页面(无需后台上传)
2.开放用户社区,允许用户通过sckur相关服务上传并提供审核
3.更多的选项
4.更快的速度与更高的性能
5.公开展示大量图片,形成图床社区