Cree una api de imagen aleatoria de página de inicio simple

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:

  1. Primero encuentre el gráfico aleatorio que necesitamos <32 gráficos aleatorios en estilo cyberpunk>
  2. 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
  3. Sube a GitHub a través de PicGo y genera la dirección de imagen acelerada
  4. 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/pngguarde el archivo, necesitamos usarlo más tarde.

imagen-20210115023855485

El archivo se ha guardado en el img.txtarchivo y ahora podemos configurar el random.phparchivo.

<?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:

imagen-20210115024511254

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

Supongo que te gusta

Origin blog.csdn.net/u011130655/article/details/113019185
Recomendado
Clasificación