搭建一个随机图片api

图片分类,并转化为webp格式

最近在搭建随机图片api过程中,想到将图片横屏和竖屏区分开,这样更适配手机和电脑,并将图片转化为webp格式,可以加载的更快,注意修改图片路径,python代码如下

py
  • 01
  • 02
  • 03
  • 04
  • 05
  • 06
  • 07
  • 08
  • 09
  • 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
from PIL import Image import os # 检查图片方向 def get_image_orientation(image_path): with Image.open(image_path) as img: width, height = img.size return "landscape" if width > height else "portrait" # 转换图片为 WebP 格式 def convert_to_webp(image_path, output_folder): with Image.open(image_path) as img: output_path = os.path.join(output_folder, os.path.splitext(os.path.basename(image_path))[0] + ".webp") img.save(output_path, "webp") # 遍历文件夹中的图片 def process_images(input_folder, output_folder_landscape, output_folder_portrait): for filename in os.listdir(input_folder): if filename.endswith(('.jpg', '.jpeg', '.png')): image_path = os.path.join(input_folder, filename) orientation = get_image_orientation(image_path) if orientation == "landscape": convert_to_webp(image_path, output_folder_landscape) else: convert_to_webp(image_path, output_folder_portrait) # 指定输入和输出文件夹 input_folder = "/root/data/alist/local/photos" output_folder_landscape = "/root/data/alist/local/landscape" output_folder_portrait = "/root/data/alist/local/portrait" # 执行转换 process_images(input_folder, output_folder_landscape, output_folder_portrait)

php代码

可以自动识别手机端和电脑端,创建landscape和portrait文件夹,分别存放横屏和竖屏图片

php
  • 01
  • 02
  • 03
  • 04
  • 05
  • 06
  • 07
  • 08
  • 09
  • 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
<?php // 设置站点地址 $weburl = 'https://api.zzii.de/'; $pcPath = 'landscape'; $mobilePath = 'portrait'; // 函数:从目录中获取图片列表 function getImagesFromDir($path) { $images = array(); if ($img_dir = @opendir($path)) { while (false !== ($img_file = readdir($img_dir))) { if (preg_match("/(\.webp)$/", $img_file)) { // 仅匹配 WebP 格式的图片 $images[] = $img_file; } } closedir($img_dir); } return $images; } // 检测用户代理以区分手机和电脑访问 $userAgent = $_SERVER['HTTP_USER_AGENT']; $isMobile = preg_match('/(android|iphone|ipad|ipod|blackberry|windows phone)/i', $userAgent); // 根据访问设备设置图片路径 if ($isMobile) { $path = $mobilePath; } else { $path = $pcPath; } // 缓存图片列表 $imgList = getImagesFromDir($path); // 从列表中随机选择一张图片 shuffle($imgList); $img = reset($imgList); // 直接输出所选的随机图片 $img_path = $path . '/' . $img; $img_url = $weburl . $img_path; header('Content-Type: image/webp'); // 设置 Content-Type 为 image/webp readfile($img_path); ?>

最后

给一个我搭建的成果吧:https://api.zzii.de/random/