Esempi Pratici

Esempi pratici e frammenti di codice per vari casi d'uso

Qwen Image Edit è uno strumento versatile che può essere applicato a una vasta gamma di casi d'uso. Questa sezione fornisce esempi pratici per illustrare come sfruttare le sue capacità per diverse esigenze aziendali e creative.

1. Editing Testuale

Modifica e Traduzione del Testo

Modifica o traduci il testo esistente nelle immagini per la localizzazione o la correzione.

Scenario: Hai un'immagine promozionale con testo in inglese e devi tradurlo in italiano per il mercato locale.

import { QwenImageEdit } from '@qwen-image-edit/sdk';

const client = new QwenImageEdit({
  apiKey: 'YOUR_API_KEY',
  region: 'us-east-1',
});

async function translateText() {
  try {
    const imageUrl = 'https://example.com/promo-en.jpg';
    const prompt = 'Traduci il testo "Limited Time Offer" in italiano "Offerta a Tempo Limitato" e "Shop Now" in "Acquista Ora".';

    const result = await client.edit({
      imageUrl: imageUrl,
      prompt: prompt,
    });

    console.log('Immagine tradotta:', result.editedImageUrl);
  } catch (error) {
    console.error('Errore durante la traduzione del testo:', error);
  }
}

translateText();

Correzione e Aggiornamento del Testo

Correggi errori di battitura o aggiorna informazioni testuali (es. date, prezzi).

Scenario: Un'immagine di un prodotto ha un prezzo errato.

// ... (inizializzazione client)

async function updatePrice() {
  try {
    const imageUrl = 'https://example.com/product-old-price.jpg';
    const prompt = 'Cambia il prezzo da "$99.99" a "$79.99".';

    const result = await client.edit({
      imageUrl: imageUrl,
      prompt: prompt,
    });

    console.log('Immagine con prezzo aggiornato:', result.editedImageUrl);
  } catch (error) {
    console.error('Errore durante l\'aggiornamento del prezzo:', error);
  }
}

updatePrice();

2. Aggiunta e Manipolazione di Elementi

Aggiunta di Loghi e Filigrane

Incorpora loghi aziendali o filigrane per branding o protezione del copyright.

Scenario: Aggiungi il logo della tua azienda a tutte le immagini dei prodotti.

// ... (inizializzazione client)

async function addLogo() {
  try {
    const imageUrl = 'https://example.com/product-image.jpg';
    const prompt = 'Aggiungi il logo aziendale nell\'angolo in basso a destra dell\'immagine. Il logo è un file PNG trasparente.';
    // Potresti anche specificare l'URL del logo se l'API lo supporta direttamente nel prompt o tramite un parametro dedicato.

    const result = await client.edit({
      imageUrl: imageUrl,
      prompt: prompt,
    });

    console.log('Immagine con logo:', result.editedImageUrl);
  } catch (error) {
    console.error('Errore durante l\'aggiunta del logo:', error);
  }
}

addLogo();

Inserimento di Tag di Prezzo e Elementi Informativi

Aggiungi elementi visivi come tag di prezzo, etichette "Nuovo" o icone di spedizione gratuita.

Scenario: Aggiungi un tag di prezzo e un'etichetta "Spedizione Gratuita" a un'immagine di un prodotto.

// ... (inizializzazione client)

async function addProductTags() {
  try {
    const imageUrl = 'https://example.com/new-product.jpg';
    const prompt = 'Aggiungi un tag di prezzo con "€49.99" nell\'angolo in alto a destra e un\'etichetta "Spedizione Gratuita" nell\'angolo in basso a sinistra.';

    const result = await client.edit({
      imageUrl: imageUrl,
      prompt: prompt,
    });

    console.log('Immagine con tag:', result.editedImageUrl);
  } catch (error) {
    console.error('Errore durante l\'aggiunta dei tag del prodotto:', error);
  }
}

addProductTags();

3. Trasferimento di Stile Avanzato

Trasferimento di Stile Artistico

Applica lo stile di un'opera d'arte a un'altra immagine, trasformandola in un pezzo artistico.

Scenario: Trasforma una foto in un dipinto in stile Van Gogh.

// ... (inizializzazione client)

async function applyArtisticStyle() {
  try {
    const imageUrl = 'https://example.com/my-photo.jpg';
    const prompt = 'Applica lo stile del dipinto "Notte Stellata" di Van Gogh a questa immagine.';

    const result = await client.edit({
      imageUrl: imageUrl,
      prompt: prompt,
    });

    console.log('Immagine con stile artistico:', result.editedImageUrl);
  } catch (error) {
    console.error('Errore durante l\'applicazione dello stile artistico:', error);
  }
}

applyArtisticStyle();

Trasferimento di Stile Fotografico

Adatta l'illuminazione, i colori e l'atmosfera di una foto a un'altra per coerenza visiva.

Scenario: Fai in modo che una foto scattata in condizioni di scarsa illuminazione assomigli a una scattata in una giornata di sole.

// ... (inizializzazione client)

async function applyPhotographicStyle() {
  try {
    const imageUrl = 'https://example.com/dark-photo.jpg';
    const prompt = 'Rendi questa foto più luminosa e vibrante, come se fosse stata scattata in una giornata di sole con cieli azzurri.';

    const result = await client.edit({
      imageUrl: imageUrl,
      prompt: prompt,
    });

    console.log('Immagine con stile fotografico:', result.editedImageUrl);
  } catch (error) {
    console.error('Errore durante l\'applicazione dello stile fotografico:', error);
  }
}

applyPhotographicStyle();

4. Elaborazione Batch

Aggiornamenti del Catalogo E-commerce

Elabora centinaia o migliaia di immagini di prodotti per aggiornamenti stagionali o promozioni.

Scenario: Cambia lo sfondo di 1000 immagini di prodotti da blu a bianco.

// ... (inizializzazione client)

async function batchUpdateBackgrounds(imageUrls) {
  const results = [];
  for (const url of imageUrls) {
    try {
      const prompt = 'Cambia lo sfondo da blu a bianco puro.';
      const result = await client.edit({
        imageUrl: url,
        prompt: prompt,
      });
      results.push({ original: url, edited: result.editedImageUrl });
    } catch (error) {
      console.error(`Errore durante l\'elaborazione di ${url}:`, error);
      results.push({ original: url, error: error.message });
    }
  }
  console.log('Risultati elaborazione batch:', results);
}

// Esempio di utilizzo:
// const productImages = ['url1.jpg', 'url2.jpg', ...];
// batchUpdateBackgrounds(productImages);

Localizzazione Multilingue

Traduci il testo su più immagini per campagne di marketing globali.

Scenario: Traduci il testo su 50 banner pubblicitari in spagnolo, francese e tedesco.

// Questo richiederebbe più chiamate API o un'API di elaborazione batch più sofisticata se disponibile.
// L'esempio mostra il concetto per una singola immagine.

async function localizeBatchImage(imageUrl, targetLanguage) {
  try {
    let prompt;
    if (targetLanguage === 'es') {
      prompt = 'Traduci tutto il testo in spagnolo.';
    } else if (targetLanguage === 'fr') {
      prompt = 'Traduci tutto il testo in francese.';
    } else if (targetLanguage === 'de') {
      prompt = 'Traduci tutto il testo in tedesco.';
    }

    const result = await client.edit({
      imageUrl: imageUrl,
      prompt: prompt,
    });
    return result.editedImageUrl;
  } catch (error) {
    console.error(`Errore durante la localizzazione di ${imageUrl} in ${targetLanguage}:`, error);
    throw error;
  }
}

// Esempio di utilizzo:
// const bannerUrl = 'https://example.com/banner.jpg';
// localizeBatchImage(bannerUrl, 'es').then(url => console.log('Spagnolo:', url));
// localizeBatchImage(bannerUrl, 'fr').then(url => console.log('Francese:', url));

5. Casi d'Uso Specifici

E-commerce: Varianti Stagionali

Modifica le immagini dei prodotti per riflettere le stagioni o le festività (es. aggiungere neve per Natale, foglie autunnali).

Scenario: Aggiungi un tocco natalizio alle immagini dei tuoi prodotti.

// ... (inizializzazione client)

async function addChristmasTheme() {
  try {
    const imageUrl = 'https://example.com/winter-product.jpg';
    const prompt = 'Aggiungi un leggero strato di neve e alcune decorazioni natalizie sullo sfondo.';

    const result = await client.edit({
      imageUrl: imageUrl,
      prompt: prompt,
    });

    console.log('Immagine a tema natalizio:', result.editedImageUrl);
  } catch (error) {
    console.error('Errore durante l\'aggiunta del tema natalizio:', error);
  }
}

addChristmasTheme();

Istruzione: Annotazione di Diagrammi

Aggiungi etichette, frecce o evidenziazioni a diagrammi e grafici per scopi didattici.

Scenario: Etichetta le parti di un diagramma anatomico.

// ... (inizializzazione client)

async function annotateDiagram() {
  try {
    const imageUrl = 'https://example.com/anatomy-diagram.png';
    const prompt = 'Etichetta la parte superiore sinistra come "Cervello" e la parte centrale destra come "Cuore". Aggiungi una freccia dal cervello al cuore.';

    const result = await client.edit({
      imageUrl: imageUrl,
      prompt: prompt,
    });

    console.log('Diagramma annotato:', result.editedImageUrl);
  } catch (error) {
    console.error('Errore durante l\'annotazione del diagramma:', error);
  }
}

annotateDiagram();

Social Media: Ottimizzazione dei Contenuti

Adatta le immagini per diverse piattaforme di social media (es. ridimensionamento, aggiunta di testo specifico per la piattaforma).

Scenario: Riadatta un'immagine per Instagram, aggiungendo un hashtag specifico.

// ... (inizializzazione client)

async function optimizeForInstagram() {
  try {
    const imageUrl = 'https://example.com/original-post.jpg';
    const prompt = 'Riadatta questa immagine per un post di Instagram (quadrato) e aggiungi l\'hashtag "#NuovoProdotto" nell\'angolo in basso a destra.';

    const result = await client.edit({
      imageUrl: imageUrl,
      prompt: prompt,
    });

    console.log('Immagine ottimizzata per Instagram:', result.editedImageUrl);
  } catch (error) {
    console.error('Errore durante l\'ottimizzazione per Instagram:', error);
  }
}

optimizeForInstagram();

6. Automazione del Flusso di Lavoro

Pipeline di Contenuti Automatizzata

Integra Qwen Image Edit in una pipeline CI/CD per l'elaborazione automatica delle immagini al momento del caricamento.

Scenario: Ogni volta che un nuovo prodotto viene caricato nel CMS, genera automaticamente 5 varianti di immagine (sfondo rimosso, logo aggiunto, testo tradotto, ecc.).

Questo richiederebbe l'integrazione con il tuo CMS o sistema di gestione delle risorse digitali (DAM) e l'utilizzo di webhook o trigger per avviare le chiamate API di Qwen Image Edit.

7. Ottimizzazione delle Prestazioni

Caching Intelligente

Implementa strategie di caching per riutilizzare le immagini elaborate e ridurre le chiamate API ridondanti.

Scenario: Se un'immagine con un prompt specifico è già stata elaborata, servi la versione memorizzata nella cache invece di richiamare l'API.

// Esempio concettuale di caching
const imageCache = new Map(); // O un sistema di caching più robusto come Redis

async function getOrProcessImage(imageUrl, prompt) {
  const cacheKey = `${imageUrl}-${prompt}`;
  if (imageCache.has(cacheKey)) {
    console.log('Servito dalla cache.');
    return imageCache.get(cacheKey);
  }

  try {
    const result = await client.edit({
      imageUrl: imageUrl,
      prompt: prompt,
    });
    imageCache.set(cacheKey, result.editedImageUrl);
    return result.editedImageUrl;
  } catch (error) {
    console.error('Errore durante l\'elaborazione dell\'immagine:', error);
    throw error;
  }
}

// Utilizzo:
// getOrProcessImage('url.jpg', 'Rimuovi sfondo').then(url => console.log(url));

Gestione Robusta degli Errori con Retry

Implementa meccanismi di retry con backoff esponenziale per gestire errori transitori dell'API.

Scenario: Un'API restituisce un errore 500 o 429; riprova dopo un breve ritardo.

async function callApiWithRetry(apiCall, retries = 3, delay = 1000) {
  for (let i = 0; i < retries; i++) {
    try {
      return await apiCall();
    } catch (error) {
      if (error.response && (error.response.status === 429 || error.response.status >= 500)) {
        console.warn(`Tentativo ${i + 1} fallito. Riprovo tra ${delay / 1000} secondi...`);
        await new Promise(resolve => setTimeout(resolve, delay));
        delay *= 2; // Backoff esponenziale
      } else {
        throw error; // Errore non ritentabile
      }
    }
  }
  throw new Error('API call failed after multiple retries.');
}

// Utilizzo:
// callApiWithRetry(() => client.edit({ imageUrl: '...', prompt: '...' }))
//   .then(result => console.log(result.editedImageUrl))
//   .catch(err => console.error('Errore finale:', err));