feat: Support processing RAW format images #17

This commit is contained in:
shiyu
2025-08-25 17:37:50 +08:00
parent a0361db82a
commit 3d0bdd6557
5 changed files with 92 additions and 13 deletions

View File

@@ -16,11 +16,9 @@ from services.virtual_fs import (
generate_temp_link_token,
verify_temp_link_token,
)
from services.thumbnail import is_image_filename, get_or_create_thumb
from services.thumbnail import is_image_filename, get_or_create_thumb, is_raw_filename
from schemas import MkdirRequest, MoveRequest
from api.response import success
from services.ai import get_text_embedding
from services.vector_db import VectorDBService
router = APIRouter(prefix='/api/fs', tags=["virtual-fs"])
@@ -33,6 +31,24 @@ async def get_file(
):
full_path = '/' + full_path if not full_path.startswith('/') else full_path
if is_raw_filename(full_path):
import rawpy
from PIL import Image
import io
try:
raw_data = await read_file(full_path)
with rawpy.imread(io.BytesIO(raw_data)) as raw:
rgb = raw.postprocess(use_camera_wb=True, output_bps=8)
im = Image.fromarray(rgb)
buf = io.BytesIO()
im.save(buf, 'JPEG', quality=90)
content = buf.getvalue()
return Response(content=content, media_type='image/jpeg')
except FileNotFoundError:
raise HTTPException(404, detail="File not found")
except Exception as e:
raise HTTPException(500, detail=f"RAW file processing failed: {e}")
try:
content = await read_file(full_path)
except FileNotFoundError: