FajarHidaa commited on
Commit
30433b6
·
verified ·
1 Parent(s): 74c17d4

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +29 -2
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
- draw.rectangle([x0, y0, x1, y1], fill=color, outline="black", width=2)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 "")