Cree una api de imagen aleatoria de página de inicio simple
1. Introducción
Las imágenes de la página de inicio son las mismas todos los días. Me molesta cuando las miro. Espero poder ver diferentes paisajes cada vez que visito la página web. Desde que escribo un blog con Typora + PicGo, las imágenes se distribuyen a nivel mundial a través de JSDlivr (de hecho, dinero CDN angustiado, después de todo, todos los meses disparo la nube y solo doy 15G), luego puedo acceder directamente a las imágenes aleatorias en GitHub a través de un simple php. ¿No puedo realizar una API de imagen aleatoria simple ?
Solo hazlo, toser, aclarar nuestro pensamiento:
- Primero encuentre el gráfico aleatorio que necesitamos <32 gráficos aleatorios en estilo cyberpunk>
- La compresión se logra a través del famoso tingpng , después de todo, la imagen 1080P es suficiente y los usuarios de teléfonos móviles
- Sube a GitHub a través de PicGo y genera la dirección de imagen acelerada
- Implementar en el servidor y llamar a través de API
2. Realización
Hemos preparado las fotos. Sube estas fotos a Tinypng, y puedes ver que la tasa de compresión es del 70%, lo cual es bastante exagerado. Las fotos que descargo aquí son todas de resolución 1920 × 1080, si la resolución no es buena, puedes úselo. Compresión OpenCV, el código es el siguiente:
import os
import cv2
file_path = "你的文件目录"
web_path = "上传的CDN目录"
def img_resize(image_path):
image = cv2.imread(file_path+image_path)
height, width = image.shape[0], image.shape[1]
# 设置新的图片分辨率框架
width_new = 1920
height_new = 1080
# 判断图片的长宽比率
if width / height >= width_new / height_new:
img = cv2.resize(image, (width_new, int(height * width_new / width)))
else:
img = cv2.resize(image, (int(width * height_new / height), height_new))
if ".jpg" in image_path:
cv2.imwrite(file_path+image_path, img, [int(cv2.IMWRITE_JPEG_QUALITY), 100])
elif ".png" in image_path:
cv2.imwrite(file_path+image_path, img, [cv2.IMWRITE_PNG_COMPRESSION, 0])
if __name__ == '__main__':
filelist = os.listdir(file_path)
with open('目录/img.txt','w') as f:
for file in filelist:
img_resize(file)
f.write(web_path+file+'\n')
En este punto, img.txt contendrá la dirección del archivo que distribuimos después de subirlo a GitHub, el formato es :, https://cdn.jsdelivr.net/gh/用户名/仓库名/文件名.jpg/png
guarde el archivo, necesitamos usarlo más tarde.
El archivo se ha guardado en el img.txt
archivo y ahora podemos configurar el random.php
archivo.
<?php
//存有美图链接的文件名img.txt
$filename = "img.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"));
}
?>
Bien, probémoslo a continuación:
Jajajaja, de hecho, no hay problema, solo necesitamos configurar el certificado HTTPS, ¡y la pista es que el backend no está en buen estado!
3. Resumen
En este punto, se han completado todas las configuraciones. Visite mi blog personal https://reid.run y podrá ver que las imágenes aleatorias en la página de inicio han sido reemplazadas con estilo cyberpunk. Un poco de pesar es que olvidé apagar el marca de agua y subirla más tarde. ¡Le prestaré atención!
Mi api cyberpunk: https://api.reid.run/random.php
Efecto de ejecución del blog: https://reid.run
Escribiré una API aleatoria automatizada de Python3 más tarde, esta configuración es demasiado engorrosa ~
Para la actualización de seguimiento de la publicación del blog, siga mi blog personal: Blog de Stardust