Skip to content

Commit 8b0314e

Browse files
committed
Add Logo Vectorializer Script
1 parent fa70b85 commit 8b0314e

File tree

2 files changed

+272
-0
lines changed

2 files changed

+272
-0
lines changed

Docs/logo_vectorializer.md

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
## _Vettorializzatore di Loghi con AI 🎨✨_ - **logo_vectorializer.py** 🤖
2+
3+
Uno script Python per **analizzare** e **vettorializzare loghi** da file immagine (`.png`, `.jpeg`, `.svg`). Utilizza l'intelligenza artificiale di **Google Gemini** per ricreare una versione vettoriale `.svg` di alta qualità.
4+
5+
---
6+
7+
## Descrizione 📄
8+
9+
Questo **Vettorializzatore di Loghi** invia un'immagine a Google Gemini e ne richiede una ricostruzione vettoriale _pixel-perfect_, salvandola in formato `.svg` senza sfondo.
10+
11+
Utile per:
12+
13+
- **Modernizzare loghi datati** o disponibili solo in bassa risoluzione.
14+
- **Ottenere una versione scalabile** per stampa, web e design grafico.
15+
- **Automatizzare un processo di conversione** che altrimenti richiederebbe software e competenze specifiche.
16+
17+
---
18+
19+
## Funzionalità 🌟
20+
21+
- **Vettorializzazione AI**: sfrutta la potenza di Google Gemini per un'analisi e una ricostruzione precisa.
22+
- **Supporto multiformato**: accetta in input i formati più comuni (`.png`, `.jpeg`, `.svg`).
23+
- **Output professionale**: genera un file `.svg` pulito, senza sfondo e pronto all'uso.
24+
- **Interfaccia interattiva**: guida l'utente passo dopo passo per inserire il file e la chiave API.
25+
- **Gestione automatica**: nomina e salva il file di output in modo prevedibile.
26+
27+
---
28+
29+
## Requisiti 📦
30+
31+
- **Python 3.x**
32+
- **Libreria `google-generativeai`**
33+
- **Una chiave API di Google Gemini**
34+
35+
> Puoi installare la libreria richiesta con il comando: `pip install google-generativeai`
36+
37+
---
38+
39+
## Utilizzo 🚀
40+
41+
### ▶️ Esecuzione Standard
42+
43+
1. Avvia lo script dal tuo terminale: `python logo_vectorializer.py`.
44+
2. Inserisci il **percorso completo** del file del logo quando richiesto.
45+
3. Incolla la tua **chiave API di Google Gemini**.
46+
4. Attendi che l'API elabori l'immagine e generi il file.
47+
48+
### Esempio Output
49+
50+
Il file vettoriale verrà salvato nella **stessa cartella in cui si trova lo script** con il seguente formato:
51+
52+
```
53+
nomefileoriginale-Vector.svg
54+
```
55+
56+
Ad esempio, `logo.png` diventerà `logo-Vector.svg`.
57+
58+
---
59+
60+
## Esempio di Utilizzo 🧪
61+
62+
```plaintext
63+
--- Logo Vectorializer con Google Gemini ---
64+
Inserisci il percorso del file immagine (png, jpeg, svg): /Users/mario/Desktop/logo_azienda.png
65+
Inserisci il tuo Google Gemini API token key: AIzaSy*******************
66+
67+
Caricamento dell'immagine...
68+
Invio dell’immagine a Google Gemini in corso...
69+
Attesa della risposta (l'operazione potrebbe richiedere alcuni istanti)...
70+
Salvataggio del file in corso: /Users/mario/scripts/logo_azienda-Vector.svg
71+
------------------------------
72+
✅ Esito finale: SUCCESSO
73+
Logo vettoriale generato con successo: /Users/mario/scripts/logo_azienda-Vector.svg
74+
------------------------------
75+
```
76+
77+
---
78+
79+
## Note 📝
80+
81+
- La qualità del risultato dipende dalla capacità del modello AI di interpretare l'immagine originale.
82+
- È necessaria una connessione a Internet attiva per contattare l'API di Gemini.
83+
- Lo script gestisce gli errori di base, come percorsi file non validi o chiavi API vuote.

scripts/logo_vectorializer.py

Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
# script Python per vettorializzare loghi da file immagine tramite Google Gemini.
2+
3+
import os
4+
import sys
5+
from pathlib import Path
6+
7+
# È necessario installare la libreria: pip install google-generativeai
8+
try:
9+
import google.generativeai as genai
10+
except ImportError:
11+
print("Errore: La libreria 'google-generativeai' non è installata.")
12+
print("Per favore, installala eseguendo: pip install google-generativeai")
13+
sys.exit(1)
14+
15+
def get_and_validate_file_path():
16+
"""
17+
Chiede all'utente di inserire il percorso di un file immagine e ne valida
18+
l'esistenza e il formato (.png, .jpeg, .svg).
19+
20+
In caso di input non valido, il programma termina.
21+
22+
Returns:
23+
pathlib.Path: Un oggetto Path che rappresenta il file immagine valido.
24+
"""
25+
file_path_str = input("Inserisci il percorso del file immagine (png, jpeg, svg): ")
26+
27+
# Controlla che il percorso non sia vuoto
28+
if not file_path_str:
29+
print("Errore: Il percorso del file non può essere vuoto.")
30+
return None
31+
32+
file_path = Path(file_path_str.strip())
33+
34+
# Verifica l'esistenza del file
35+
if not file_path.is_file():
36+
print(f"Errore: Il file '{file_path}' non è stato trovato.")
37+
return None
38+
39+
# Controlla che il formato sia tra quelli supportati
40+
supported_formats = ['.png', '.jpeg', '.jpg', '.svg']
41+
if file_path.suffix.lower() not in supported_formats:
42+
print(f"Errore: Formato file non supportato. Usa uno dei seguenti: {', '.join(supported_formats)}")
43+
return None
44+
45+
return file_path
46+
47+
def get_gemini_api_key():
48+
"""
49+
Chiede all'utente di inserire il proprio token API di Google Gemini
50+
e verifica che non sia vuoto.
51+
52+
Returns:
53+
str: La chiave API fornita dall'utente.
54+
"""
55+
api_key = input("Inserisci il tuo Google Gemini API token key: ")
56+
57+
# Verifica che la chiave non sia una stringa vuota
58+
if not api_key or not api_key.strip():
59+
print("Errore: Il token API non può essere vuoto.")
60+
return None
61+
62+
return api_key.strip()
63+
64+
def call_gemini_api(api_key, image_path):
65+
"""
66+
Configura l'API di Gemini, carica l'immagine e invia la richiesta
67+
per la vettorializzazione.
68+
69+
Args:
70+
api_key (str): La chiave API di Google Gemini.
71+
image_path (pathlib.Path): Il percorso del file immagine da elaborare.
72+
73+
Returns:
74+
str: Il contenuto SVG generato come stringa, oppure None in caso di errore.
75+
"""
76+
try:
77+
# Configura il client dell'API con la chiave fornita
78+
genai.configure(api_key=api_key)
79+
80+
print("Caricamento dell'immagine...")
81+
# Carica il file immagine per renderlo disponibile all'API
82+
uploaded_image = genai.upload_file(path=str(image_path))
83+
84+
# Inizializza il modello generativo
85+
model = genai.GenerativeModel('models/gemini-1.5-pro-latest')
86+
87+
# Definisce il prompt per la richiesta di vettorializzazione
88+
prompt = (
89+
"Analizza attentamente questa immagine. Ricrea un logo in formato .svg vettoriale, "
90+
"senza sfondo, che sia pixel-perfect ed esteticamente identico all’originale. "
91+
"L’obiettivo è ottenere un file finale utilizzabile come logo ufficiale in qualsiasi contesto grafico. "
92+
"L'output deve contenere ESCLUSIVAMENTE il codice SVG, senza alcuna formattazione "
93+
"aggiuntiva come '```svg', spiegazioni o commenti."
94+
)
95+
96+
print("Invio dell’immagine a Google Gemini in corso...")
97+
print("Attesa della risposta (l'operazione potrebbe richiedere alcuni istanti)...")
98+
99+
# Invia la richiesta all'API combinando il prompt testuale e l'immagine
100+
response = model.generate_content([prompt, uploaded_image])
101+
102+
# Pulisce la risposta per estrarre solo il codice SVG
103+
svg_content = response.text.strip()
104+
if svg_content.startswith("```svg"):
105+
svg_content = svg_content[5:]
106+
if svg_content.endswith("```"):
107+
svg_content = svg_content[:-3]
108+
109+
return svg_content.strip()
110+
111+
except Exception as e:
112+
print(f"Errore durante la comunicazione con l'API Gemini: {e}")
113+
return None
114+
115+
def save_output_file(original_path, svg_content):
116+
"""
117+
Salva il contenuto SVG in un nuovo file nella stessa cartella dello script.
118+
119+
Args:
120+
original_path (pathlib.Path): Il percorso del file immagine originale.
121+
svg_content (str): La stringa contenente il codice SVG da salvare.
122+
123+
Returns:
124+
str: Il percorso completo del file di output salvato, o None se si verifica un errore.
125+
"""
126+
try:
127+
# Costruisce il nome del file di output partendo dall'originale
128+
output_filename = f"{original_path.stem}-Vector.svg"
129+
130+
# Determina la directory in cui si trova lo script in esecuzione
131+
script_directory = Path(sys.argv[0]).parent
132+
output_path = script_directory / output_filename
133+
134+
print(f"Salvataggio del file in corso: {output_path}")
135+
136+
# Scrive il contenuto SVG nel file di destinazione
137+
with open(output_path, 'w', encoding='utf-8') as f:
138+
f.write(svg_content)
139+
140+
return str(output_path)
141+
142+
except IOError as e:
143+
print(f"Errore durante il salvataggio del file su disco: {e}")
144+
return None
145+
146+
def main():
147+
"""
148+
Funzione principale che orchestra l'intero processo:
149+
1. Richiede e valida gli input dell'utente.
150+
2. Chiama l'API per l'elaborazione.
151+
3. Salva il risultato.
152+
4. Comunica l'esito finale.
153+
"""
154+
print("--- Logo Vectorializer con Google Gemini ---")
155+
156+
# Fase 1: Input e validazione del percorso del file
157+
image_path = get_and_validate_file_path()
158+
if not image_path:
159+
print("\nProgramma terminato a causa di un input non valido.")
160+
sys.exit(1) # Termina l'esecuzione con un codice di errore
161+
162+
# Fase 2: Input e validazione della chiave API
163+
api_key = get_gemini_api_key()
164+
if not api_key:
165+
print("\nProgramma terminato a causa di un input non valido.")
166+
sys.exit(1)
167+
168+
# Fase 3: Elaborazione tramite API Gemini
169+
svg_result = call_gemini_api(api_key, image_path)
170+
if not svg_result:
171+
print("\nElaborazione fallita. Il programma verrà terminato.")
172+
sys.exit(1)
173+
174+
# Fase 4: Salvataggio del file di output
175+
saved_file_path = save_output_file(image_path, svg_result)
176+
177+
# Fase 5: Comunicazione dell'esito finale
178+
print("-" * 30)
179+
if saved_file_path:
180+
print("✅ Esito finale: SUCCESSO")
181+
print(f"Logo vettoriale generato con successo: {saved_file_path}")
182+
else:
183+
print("❌ Esito finale: ERRORE")
184+
print("Si è verificato un errore durante il salvataggio del file.")
185+
print("-" * 30)
186+
187+
188+
if __name__ == "__main__":
189+
main()

0 commit comments

Comments
 (0)