import io import json import logging import time from PIL import ImageEnhance from fastapi import APIRouter, HTTPException from minio import Minio from app.core.config import settings from app.schemas.brighten import BrightenModel from app.schemas.response_template import ResponseModel from app.service.utils.new_oss_client import oss_get_image, oss_upload_image router = APIRouter() logger = logging.getLogger() def increase_brightness(img, factor): enhancer = ImageEnhance.Brightness(img) bright_img = enhancer.enhance(factor) return bright_img minio_client = Minio(settings.MINIO_URL, access_key=settings.MINIO_ACCESS, secret_key=settings.MINIO_SECRET, secure=settings.MINIO_SECURE) @router.post("/brighten") async def brighten(request_item: BrightenModel): """ 创建一个具有以下参数的请求体: - **image_url**: 提亮图片url - **brighten_value**: 提高亮度的比重 亮度因子 1.0 表示原始亮度,1.5 表示增加 50% 的亮度 示例参数: { "image_url": "aida-users/89/relight_image/3850e17b-3efd-4597-90ef-2a7bcd1a1a0b-0-89.png", "brighten_value": 1.5 } """ try: start_time = time.time() logger.info(f"brighten request item is : @@@@@@:{json.dumps(request_item.dict(),indent=4)}") image = oss_get_image(oss_client=minio_client, bucket=request_item.image_url.split('/')[0], object_name=request_item.image_url[request_item.image_url.find('/') + 1:], data_type="PIL") new_image = increase_brightness(image, request_item.brighten_value) image_data = io.BytesIO() new_image.save(image_data, format='PNG') image_data.seek(0) image_bytes = image_data.read() req = oss_upload_image(oss_client=minio_client, bucket=request_item.image_url.split('/')[0], object_name=request_item.image_url[request_item.image_url.find('/') + 1:], image_bytes=image_bytes) brighten_url = f"{req.bucket_name}/{req.object_name}" logger.info(f"run time is : {time.time() - start_time}") except Exception as e: logger.warning(f"brighten Run Exception @@@@@@:{e}") raise HTTPException(status_code=404, detail=str(e)) return ResponseModel(data=brighten_url) if __name__ == '__main__': request_item = BrightenModel(image_url="aida-users/89/relight_image/3850e17b-3efd-4597-90ef-2a7bcd1a1a0b-0-89.png", brighten_value=1.5) image = oss_get_image(bucket=request_item.image_url.split('/')[0], object_name=request_item.image_url[request_item.image_url.find('/') + 1:], data_type="PIL") new_image = increase_brightness(image, request_item.brighten_value) new_image.show()