2024-08-28 16:39:39 +08:00
|
|
|
|
import io
|
|
|
|
|
|
import json
|
|
|
|
|
|
import logging
|
|
|
|
|
|
import time
|
|
|
|
|
|
|
|
|
|
|
|
from PIL import ImageEnhance
|
|
|
|
|
|
from fastapi import APIRouter, HTTPException
|
2025-12-30 16:49:08 +08:00
|
|
|
|
from minio import Minio
|
|
|
|
|
|
from app.core.config import settings
|
2024-08-28 16:39:39 +08:00
|
|
|
|
from app.schemas.brighten import BrightenModel
|
|
|
|
|
|
from app.schemas.response_template import ResponseModel
|
2025-12-30 16:49:08 +08:00
|
|
|
|
from app.service.utils.new_oss_client import oss_get_image, oss_upload_image
|
2024-08-28 16:39:39 +08:00
|
|
|
|
|
|
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
logger = logging.getLogger()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def increase_brightness(img, factor):
|
|
|
|
|
|
enhancer = ImageEnhance.Brightness(img)
|
|
|
|
|
|
bright_img = enhancer.enhance(factor)
|
|
|
|
|
|
return bright_img
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-12-30 16:49:08 +08:00
|
|
|
|
minio_client = Minio(settings.MINIO_URL, access_key=settings.MINIO_ACCESS, secret_key=settings.MINIO_SECRET, secure=settings.MINIO_SECURE)
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-08-28 16:39:39 +08:00
|
|
|
|
@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",
|
2024-09-03 15:49:42 +08:00
|
|
|
|
"brighten_value": 1.5
|
2024-08-28 16:39:39 +08:00
|
|
|
|
}
|
|
|
|
|
|
"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
start_time = time.time()
|
2025-12-30 16:49:08 +08:00
|
|
|
|
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")
|
2024-08-28 16:39:39 +08:00
|
|
|
|
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()
|
2025-12-30 16:49:08 +08:00
|
|
|
|
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)
|
2024-08-28 16:39:39 +08:00
|
|
|
|
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",
|
2024-09-03 15:49:42 +08:00
|
|
|
|
brighten_value=1.5)
|
2024-08-28 16:39:39 +08:00
|
|
|
|
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()
|