1.前言
網上其實可以搜到很多關於隨機圖片的Api,但是很多已經年代久遠、速度緩慢,或者是分類不全不太符合口味,所以選擇自建一個,圖片都是自己挑選的,不喜歡也可以更換,方便維護。
本次使用的是GitHub+jsdelivr 來構建,同樣也使用於使用OSS雲存儲的用戶。
有能網絡條件的可以直接使用Github完成搭建,完全免費。
由於jsdeliver已經被半牆,國內基本不能正常使用,建議自己找新的CDN,我已經改回阿里雲OSS+阿里雲CDN,在這不作使用解釋。
2.實現步驟
①建立圖片API,首先就得有圖片,數量風格都可以自選,在這里推薦幾個免費的圖庫——wallhaven.cc 、Pixbay 、 Pexels
②把圖片保持到本地后,文件名大多都是亂的,最好統一一下名稱,排個序號,方便日后刪除更換,在這里建議把圖片格式轉為webp
形式,可以有效提升加載時間。這邊不建議使用太大的圖片,因為在讀取的時候會加載圖片,一般圖片10M左右已經要加載很久,所以我們需要壓縮圖片。可以選擇TinyPNG實現,非會員支持最大5M和20張的圖片處理,可以有效壓縮圖片大小且不會產出肉眼可見的影響。
③接着可以把圖片上傳到雲存儲或者網站空間,比如Github、Gitee和各大雲廠商。
(我原本是使用阿里雲的OSS,但是奈何問題太多,現在已經轉為Github+jsdelivr)
通過Github直接訪問圖片國內可能不太理想,這時可以使用jsdeliver進行 CDN 加速,他是免費開源的。
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,即可調取圖片輸出。