2026-05-08-03-45-01 调整Mask双图展示
This commit is contained in:
@@ -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":
|
||||
|
||||
Reference in New Issue
Block a user