自建随机图片API

1.前言

网上其实可以搜到很多关于随机图片的Api,但是很多已经年代久远、速度缓慢,或者是分类不全不太符合口味,所以选择自建一个,图片都是自己挑选的,不喜欢也可以更换,方便维护。

本次使用的是GitHub+jsdelivr 来构建,同样也使用于使用OSS云存储的用户。

有网络条件的可以直接使用Github完成搭建,完全免费。当然用本地存储的也是可以的,就是需要占用服务器硬盘。

由于jsdeliver已经被半墙,国内基本不能正常使用,建议自己找新的CDN,我已经改回阿里云OSS+阿里云CDN,在这不作使用解释。

2.实现步骤

①建立图片API,首先就得有图片,数量风格都可以自选,在这里推荐几个免费的图库——wallhaven.cc(已经半墙)Pixbay Pexels 

②把图片保持到本地后,文件名大多都是乱的,最好统一一下名称,排个序号,方便日后删除更换,在这里建议把图片格式转为webp形式,可以有效提升加载时间。这边不建议使用太大的图片,因为在读取的时候会加载图片,一般图片10M左右已经要加载很久,所以我们需要压缩图片。可以选择TinyPNG实现,非会员支持最大5M和20张的图片处理,可以有效压缩图片大小且不会产出肉眼可见的影响。

③接着可以把图片上传到云存储或者网站空间,比如Github、Gitee、Onedrive等各大服务商。

(我原本是使用阿里云的OSS,但是奈何问题太多,现在已经转为Github+jsdelivr)

通过Github直接访问图片国内可能不太理想,这时可以使用jsdeliver进行 CDN 加速,他是免费开源的。

 

阿里云OSSGithub

 

jsdeliver使用方法(已弃用)
使用非常简单,只需要把图片地址链接域名改为 CDN 的域名。格式如下:

https://cdn.jsdelivr.net/gh/<你的github用户名>/<你的图床仓库名>@<仓库版本号>/图片的路径

 

以 1.webp 图片为例

最终地址为(地址仅做为范例参考):

https://cdn.jsdelivr.net/gh/dogsking/randompicturePC/images/1.webp

④以此类推,获取剩下图片的URl,然后保存到TXT文本里:

https://cdn.jsdelivr.net/gh/dogsking/randompicturePC/images/1.webp
https://cdn.jsdelivr.net/gh/dogsking/randompicturePC/images/2.webp
https://cdn.jsdelivr.net/gh/dogsking/randompicturePC/images/3.webp
https://cdn.jsdelivr.net/gh/dogsking/randompicturePC/images/4.webp
https://cdn.jsdelivr.net/gh/dogsking/randompicturePC/images/5.webp
https://cdn.jsdelivr.net/gh/dogsking/randompicturePC/images/6.webp

如果是使用某些云存储平台的直接使用图片的URL就可以了。

 

⑤把TXT文件放在云存储或者网站任意目录下,注意要跟下文中的PHP文件要放在同一级目录,比如同时放在……/Random/Photo/img.txt和……/Random/Photo/img.php

如果嫌麻烦,也可以用python自动输出解决:

# 作者(Author):TonaSmith
# 链接(URL):https://caoyongzhuo.cn/archives/466
#适用于序号编排的图片如1.png、2.png……

filename="D:\\文档\\imgs.txt"    /*输出目录及文件名*/
randimgs=open(filename,"a")
for numbers in range(1,20):       /*输出序号,这里是从1输出到20*/
    randimgs.write("https://cdn.jsdelivr.net/gh/dogsking/randompicturePC/images/"+str(numbers)+".webp\n")   /*修改此处的图片地址*/
randimgs.close()

⑥最后使用随机获取图片链接输出的PHP:

<?php
//此php和保存链接的txt文件放在同一目录下
$filename = "img.txt";  /*保存链接的txt文件名*/
if(!file_exists($filename)){
    die('文件不存在');
}
//从文本获取链接
$pics = [];
$fs = fopen($filename, "r");
while(!feof($fs)){
    $line=trim(fgets($fs));
    if($line!=''){
        array_push($pics, $line);
    }
}
//从数组随机获取链接
$pic = $pics[array_rand($pics)];
//返回指定格式
$type=$_GET['type'];
switch($type){
//JSON返回
case 'json':
    header('Content-type:text/json');
    die(json_encode(['pic'=>$pic]));
default:
    die(header("Location: $pic"));
}
?>

⑦在需要使用php文件的地方填入文件路径就可以访问这个随机图片php,即可调取图片输出。

posted @ 2021-11-25 11:01  迷莫寒  阅读(4194)  评论(5编辑  收藏  举报