Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -114,13 +114,40 @@ def pack_banners(df: pd.DataFrame, roll_width: float, margin: float,
|
|
| 114 |
orig_w, orig_h = original_dims[r.rid]
|
| 115 |
is_rotated = round(r.width - margin, 3) != round(orig_w, 3)
|
| 116 |
|
|
|
|
| 117 |
x0 = r.x * px_per_unit
|
| 118 |
-
# sumbu Y dibalik supaya (0,0) tampil di kiri-atas seperti lembar cetak
|
| 119 |
y0 = (used_height - r.y - r.height) * px_per_unit
|
| 120 |
x1 = (r.x + r.width) * px_per_unit
|
| 121 |
y1 = (used_height - r.y) * px_per_unit
|
| 122 |
|
| 123 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 124 |
|
| 125 |
label_text = base_label
|
| 126 |
size_text = f"{orig_w:g} x {orig_h:g}" + (" (diputar)" if is_rotated else "")
|
|
|
|
| 114 |
orig_w, orig_h = original_dims[r.rid]
|
| 115 |
is_rotated = round(r.width - margin, 3) != round(orig_w, 3)
|
| 116 |
|
| 117 |
+
# --- Koordinat OUTER (banner + margin) ---
|
| 118 |
x0 = r.x * px_per_unit
|
|
|
|
| 119 |
y0 = (used_height - r.y - r.height) * px_per_unit
|
| 120 |
x1 = (r.x + r.width) * px_per_unit
|
| 121 |
y1 = (used_height - r.y) * px_per_unit
|
| 122 |
|
| 123 |
+
# --- Koordinat INNER (banner asli, margin disamakan ke 4 sisi) ---
|
| 124 |
+
m = margin * px_per_unit
|
| 125 |
+
ix0, iy0 = x0 + m / 2, y0 + m / 2
|
| 126 |
+
ix1, iy1 = x1 - m / 2, y1 - m / 2
|
| 127 |
+
|
| 128 |
+
# --- Warna ---
|
| 129 |
+
base_label = r.rid.rsplit("#", 1)[0]
|
| 130 |
+
color = generate_color(base_label)
|
| 131 |
+
|
| 132 |
+
# Buat warna lebih terang untuk area margin (outer)
|
| 133 |
+
def lighten(c, factor=0.4):
|
| 134 |
+
return tuple(min(255, int(v + (255 - v) * factor)) for v in c)
|
| 135 |
+
|
| 136 |
+
outer_color = "#f0f0f0" # abu-abu terang
|
| 137 |
+
inner_color = color # warna banner
|
| 138 |
+
|
| 139 |
+
|
| 140 |
+
# --- Gambar OUTER (margin area) ---
|
| 141 |
+
draw.rectangle([x0, y0, x1, y1], fill=outer_color, outline="black", width=2)
|
| 142 |
+
|
| 143 |
+
# --- Gambar INNER (banner asli) ---
|
| 144 |
+
# Pastikan inner tidak lebih kecil dari 1 pixel
|
| 145 |
+
if ix1 > ix0 and iy1 > iy0:
|
| 146 |
+
draw.rectangle([ix0, iy0, ix1, iy1], fill=inner_color, outline="black", width=1)
|
| 147 |
+
|
| 148 |
+
# --- Deteksi rotasi ---
|
| 149 |
+
orig_w, orig_h = original_dims[r.rid]
|
| 150 |
+
is_rotated = round(r.width - margin, 3) != round(orig_w, 3)
|
| 151 |
|
| 152 |
label_text = base_label
|
| 153 |
size_text = f"{orig_w:g} x {orig_h:g}" + (" (diputar)" if is_rotated else "")
|