From 7243250abc137a84d80be0369937c12651e7c7e5 Mon Sep 17 00:00:00 2001 From: Mikei386 <44135113+Mikei386@users.noreply.github.com> Date: Mon, 22 Jun 2026 16:25:16 +0200 Subject: [PATCH] Respect object bounds when trimming labels --- app/app.py | 9 +++++++-- app/static/editor.js | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/app/app.py b/app/app.py index 62fea86..7849436 100644 --- a/app/app.py +++ b/app/app.py @@ -235,19 +235,24 @@ def crop_label_to_content(image: Image.Image, design: dict[str, Any], scale: flo min_length_px = scaled_mm_to_px(10, scale) black_mask = image.convert("L").point(lambda pixel: 255 if pixel < 128 else 0, "L") bbox = black_mask.getbbox() + objects = [obj for obj in design.get("objects", []) if isinstance(obj, dict) and not obj.get("hidden")] + object_end = 0 + for obj in objects: + x, y, w, h = object_box(obj, scale) + object_end = max(object_end, y + h if orientation == "portrait" else x + w) if orientation == "portrait": fixed_width = scaled_mm_to_px(tape_width, scale) if not bbox: return new_label_image(fixed_width, min_length_px) - end = min(image.height, bbox[3] + margin_px) + end = min(image.height, max(bbox[3], object_end) + margin_px) target = min(image.height, max(min_length_px, end)) return image.crop((0, 0, image.width, target)) fixed_height = scaled_mm_to_px(tape_width, scale) if not bbox: return new_label_image(min_length_px, fixed_height) - end = min(image.width, bbox[2] + margin_px) + end = min(image.width, max(bbox[2], object_end) + margin_px) target = min(image.width, max(min_length_px, end)) return image.crop((0, 0, target, image.height)) diff --git a/app/static/editor.js b/app/static/editor.js index 43ada78..df1966e 100644 --- a/app/static/editor.js +++ b/app/static/editor.js @@ -131,6 +131,7 @@ function objectContentEndMm(obj) { if (obj.hidden) return 0; if (state.design.orientation === "portrait") return obj.y + obj.h; if (obj.type !== "text" && obj.type !== "symbol") return obj.x + obj.w; + if (obj.manualSize) return obj.x + obj.w; const { value } = objectFont(obj); ctx.save();