""" Generator PSD — Skrzynka na wino na ślub, nadruk UV — Kwiaty Wzór 3. Otwiera szablon PSD, podmienia teksty w grupie "Warstwa 1" z zachowaniem pozycji warstw, zapisuje jako nowy PSD w folderze _gotowe. Wymaga: uruchomiony Adobe Photoshop, pakiet photoshop-python-api. Użycie: python skrzynka_wino_slub_kwiaty_wzor3.py \ --panna_mloda "Kasia" --pan_mlody "Marek" \ --data "14.06.2026" --od_kogo "Życzą Mama i Tata" \ --klient "Kasia Marek Kowalski" python skrzynka_wino_slub_kwiaty_wzor3.py \ --panna_mloda "Kasia" --pan_mlody "Marek" \ --data "14.06.2026" --od_kogo "Życzą Mama i Tata" \ --zyczenia "Sto lat szczęścia!" --klient "Kasia Marek Kowalski" """ import argparse import os import photoshop.api as ps PROJEKT_DIR = r"d:\pomysloweprezenty.pl\projekty\ślub - skrzynki na wino\Skrzynka na wino na ślub nadruk UV - Kwiaty Wzór 3" SZABLON_PATH = os.path.join(PROJEKT_DIR, "Skrzynka na wino na ślub nadruk UV - Kwiaty Wzór 3.psd") GOTOWE_DIR = os.path.join(PROJEKT_DIR, "_gotowe") # Warstwy tekstowe w grupie "Warstwa 1" GROUP_NAME = "Warstwa 1" def change_text_preserve_position(layer, new_text): """Zmienia tekst warstwy z zachowaniem jej oryginalnej pozycji (środek bounds).""" b = [float(x) for x in layer.bounds] cx_before = (b[0] + b[2]) / 2 cy_before = (b[1] + b[3]) / 2 layer.textItem.contents = new_text b2 = [float(x) for x in layer.bounds] cx_after = (b2[0] + b2[2]) / 2 cy_after = (b2[1] + b2[3]) / 2 dx = cx_before - cx_after dy = cy_before - cy_after if dx != 0 or dy != 0: layer.translate(dx, dy) def generate(panna_mloda, pan_mlody, data, od_kogo, klient, zyczenia=None): """Generuje PSD z podmienionymi danymi.""" os.makedirs(GOTOWE_DIR, exist_ok=True) output_path = os.path.join(GOTOWE_DIR, f"{klient}.psd") app = ps.Application() doc = app.open(SZABLON_PATH) print(f"Otwarto szablon: {doc.name}") group = doc.layerSets[GROUP_NAME] replacements = { "panna_mloda": panna_mloda, "pan_mlody": pan_mlody, "data": data, "od_kogo": od_kogo, } if zyczenia is not None: replacements["zyczenia"] = zyczenia for layer_name, new_text in replacements.items(): layer = group.artLayers[layer_name] old_text = layer.textItem.contents change_text_preserve_position(layer, new_text) print(f" {layer_name}: \"{old_text}\" -> \"{new_text}\"") psd_opts = ps.PhotoshopSaveOptions() app.activeDocument.saveAs(output_path, psd_opts, True) print(f"Zapisano: {output_path}") app.activeDocument.close(ps.SaveOptions.DoNotSaveChanges) print("Gotowe!") return output_path def main(): parser = argparse.ArgumentParser( description="Generator PSD - skrzynka na wino ślub, kwiaty Wzór 3" ) parser.add_argument("--panna_mloda", required=True, help="Imię panny młodej (np. Kasia)") parser.add_argument("--pan_mlody", required=True, help="Imię pana młodego (np. Marek)") parser.add_argument("--data", required=True, help="Data ślubu (np. 14.06.2026)") parser.add_argument("--od_kogo", required=True, help="Kto składa życzenia (np. Życzą Mama i Tata)") parser.add_argument("--klient", required=True, help="Imię i nazwisko klienta (nazwa pliku wyjściowego)") parser.add_argument("--zyczenia", default=None, help="Tekst życzeń (domyślnie: oryginalny z szablonu)") args = parser.parse_args() generate( panna_mloda=args.panna_mloda, pan_mlody=args.pan_mlody, data=args.data, od_kogo=args.od_kogo, klient=args.klient, zyczenia=args.zyczenia, ) if __name__ == "__main__": main()