要为自己的网站、博客或 App 添加一个“每日一图”或“随机背景”功能吗?本文将通过两种主流方式,从零搭建一个高性能,支持跨域的随机图片 API。

方案一:宝塔面板 + PHP站点。

方案二:Python Flask运行web服务。

一、准备工作

在开始之前,请确保你拥有:

  • 一台 Linux 服务器(阿里云/腾讯云/华为云等)或本地测试环境。

  • 一个域名(可选,用于绑定 API 地址)。

  • 一组图片链接(可以是本地路径,也可以是图床的远程 URL)或者一个存放图片的文件夹。

准备一个 img.txt 文件,每行存放一个图片链接,例如:

https://picsum.photos/800/600?random=1
https://picsum.photos/800/600?random=2
https://picsum.photos/800/600?random=3

方案一:宝塔面板 + PHP站点

1. 安装宝塔面板

确保系统符合安装宝塔面板,可前往官网了解并复制安装命令:宝塔面板下载,免费全能的服务器运维软件

如果你还没有安装宝塔,请登录服务器执行以下命令(以 Ubuntu 为例):

wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh && sudo bash install_panel.sh 

安装完成后,登录面板(通常是 http://你的IP:8888),按提示设置用户名和密码。

2.安装PHP8.4版本

安装宝塔面板后,就可以在面板内安装PHP,一键化安装非常方便。

3. 创建 PHP 站点

  1. 登录宝塔面板,点击左侧 “网站” -> “添加站点”

  2. 填写域名(如 random.aevi.top),若无域名可填服务器 IP,然后选择刚刚安装的PHP8.4版本。

  3. 点击“确定”,站点创建成功。

4. 上传代码与图片列表

  1. 点击刚创建站点的 “根目录”,进入文件管理。

  2. 新建一个文本文件 img.txt,将你的图片链接逐行粘贴进去,保存。

  3. 新建一个 PHP 文件 index.php,粘贴以下代码:

<?php
// 随机图片 API - PHP 版
header("Access-Control-Allow-Origin: *"); // 允许跨域
header("Access-Control-Allow-Methods: GET");

$filename = "img.txt";
if (!file_exists($filename)) {
    http_response_code(404);
    die('文件不存在');
}

// 读取非空行
$pics = array_filter(file($filename), function($line) {
    return trim($line) !== '';
});

if (empty($pics)) {
    http_response_code(404);
    die('图片列表为空');
}

// 随机选择
$pic = trim($pics[array_rand($pics)]);
$type = isset($_GET['type']) ? strtolower($_GET['type']) : '';

if ($type === 'json') {
    header('Content-Type: application/json');
    echo json_encode(['pic' => $pic]);
} else {
    // 302 重定向
    header("Location: $pic");
    exit;
}
?>

5.测试接口

  • 直接访问:http://你的域名/ → 会自动跳转到随机图片。

  • JSON 模式:http://你的域名/?type=json → 返回 {"pic": "..."}

我的API:https://random.aevi.top/

方案二:Python Flask运行web服务

1.安装 python 环境与 Flask

这里我选择安装 conda包管理工具,conda自带 python,管理虚拟环境及依赖包非常方便。

安装方法参考博文:Python工具:Conda 包管理器 | Guhe Blog

登录服务器终端,执行:

# conda新建一个虚拟环境
conda create --name random python==3.13

# 激活虚拟环境
conda activate random 

# 安装包
pip install flask flask-cors

2.编写 Flask 应用

在项目目录下创建 api.py:

from flask import Flask, request, jsonify, redirect
from flask_cors import CORS  
import os
import random  

app = Flask(__name__)

# 启用 CORS,允许所有来源跨域访问(生产环境可限制 origin)
CORS(app, resources={r"/*": {"origins": "*"}})

# 获取当前脚本所在目录
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
IMG_FILE = os.path.join(BASE_DIR, "img.txt")

@app.route('/')
def random_image():
    if not os.path.exists(IMG_FILE):
        return "文件不存在", 404

    try:
        with open(IMG_FILE, 'r', encoding='utf-8') as f:
            lines = [line.strip() for line in f if line.strip()]
    except UnicodeDecodeError:
        # 如果 UTF-8 解码失败,尝试 GBK(兼容 Windows 系统保存的文件)
        with open(IMG_FILE, 'r', encoding='gbk') as f:
            lines = [line.strip() for line in f if line.strip()]

    if not lines:
        return "图片列表为空", 404

    pic_url = random.choice(lines)
    type_param = request.args.get('type', '').lower()

    if type_param == 'json':
        # CORS 已由 flask-cors 自动处理,无需手动加头
        return jsonify({'pic': pic_url})
    else:
        return redirect(pic_url)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)

同样在该目录下创建 img.txt 并填入图片链接。

3.后台运行 Flask

使用 nohup 或 screen 让程序在后台运行:

nohup python3 app.py > output.log 2>&1 &

此时,访问http://服务器IP:5000即可看到效果。(记得防火墙放行指定端口)

为安全性考虑,可以做反向代理,绑定域名进行访问调用API。

希望这篇博客对你有帮助!如果有其他问题,欢迎随时提问!