2026-05-08-03-45-01 调整Mask双图展示

This commit is contained in:
2026-05-08 03:49:47 +08:00
parent aee4466a94
commit 946c0f4ef3
6 changed files with 215 additions and 34 deletions

View File

@@ -499,7 +499,20 @@ def make_library_slice_preview(item_id, index):
}
def make_library_reformat_preview(item_id, plane, index, window, model_id=""):
def render_mask_only_preview(mask, size):
preview = Image.new("RGB", size, (8, 13, 28))
if mask is None:
return preview
alpha = mask.resize(size, Image.Resampling.NEAREST)
overlay = Image.new("RGBA", size, (255, 112, 32, 0))
overlay.putalpha(alpha.point(lambda value: 210 if value else 0))
preview_rgba = preview.convert("RGBA")
preview_rgba.alpha_composite(overlay)
return preview_rgba.convert("RGB")
def make_library_reformat_preview(item_id, plane, index, window, model_id="", mask_only=False):
item = find_library_item(item_id)
if not item:
raise RuntimeError("影像库中没有找到该数据。")
@@ -537,13 +550,18 @@ def make_library_reformat_preview(item_id, plane, index, window, model_id=""):
cache_dir = PREVIEW_CACHE_DIR / item_id / "reformat"
safe_mkdir(cache_dir)
model_suffix = f"_model_{safe_filename(model_id)}" if model_id else ""
preview_path = cache_dir / f"{plane}_{window}_{index:04d}{model_suffix}.png"
view_suffix = "_mask_only" if mask_only and model_id else ""
preview_path = cache_dir / f"{plane}_{window}_{index:04d}{model_suffix}{view_suffix}.png"
if not preview_path.exists():
preset = VIEWER_WINDOWS[window]
preview = Image.fromarray(ct_window(image, preset["low"], preset["high"])).convert("RGB")
if mask is not None:
preview = overlay_mask_on_preview(preview, mask)
preview = fit_image(preview, 960, 720)
if mask_only and model_id:
base_size = fit_image(Image.fromarray(ct_window(image, preset["low"], preset["high"])).convert("RGB"), 960, 720).size
preview = render_mask_only_preview(mask, base_size)
else:
preview = Image.fromarray(ct_window(image, preset["low"], preset["high"])).convert("RGB")
if mask is not None:
preview = overlay_mask_on_preview(preview, mask)
preview = fit_image(preview, 960, 720)
preview.save(preview_path, format="PNG")
return {
@@ -1234,7 +1252,8 @@ class Handler(BaseHTTPRequestHandler):
index = params.get("index", ["0"])[0]
window = params.get("window", ["default"])[0]
model_id = params.get("modelId", [""])[0]
self.send_json(make_library_reformat_preview(item_id, plane, index, window, model_id))
mask_only = params.get("maskOnly", ["0"])[0] in {"1", "true", "yes"}
self.send_json(make_library_reformat_preview(item_id, plane, index, window, model_id, mask_only))
return
if parsed.path == "/api/library/info":