Schnellstart

Beginnen Sie mit Qwen Image Edit in wenigen Minuten

Schnellstart-Anleitung

Erfahren Sie, wie Sie Qwen Image Edit in wenigen Minuten einrichten und Ihre erste KI-gestützte Bildbearbeitung durchführen.

🚀 Erste Einrichtung

1. API-Schlüssel erhalten

Besuchen Sie das Qwen Dashboard und:

  1. Registrieren Sie sich oder melden Sie sich an
  2. Navigieren Sie zu "API Keys"
  3. Erstellen Sie einen neuen Schlüssel
  4. Kopieren Sie Ihren API-Schlüssel (beginnt mit qwen_)

2. Umgebungsvariablen einrichten

Erstellen Sie eine .env-Datei in Ihrem Projektverzeichnis:

# .env
QWEN_API_KEY=qwen_ihr_api_schluessel_hier
QWEN_REGION=eu-west-1

Verfügbare Regionen:

  • eu-west-1 (Irland) - Empfohlen für Europa
  • us-east-1 (Virginia) - Empfohlen für Nordamerika
  • ap-southeast-1 (Singapur) - Empfohlen für Asien
  • ap-northeast-1 (Tokio) - Empfohlen für Japan

📦 Installation

JavaScript/TypeScript

# Mit npm
npm install qwen-image-edit

# Mit yarn
yarn add qwen-image-edit

# Mit pnpm
pnpm add qwen-image-edit

Grundlegende Einrichtung:

import { QwenImageEdit } from 'qwen-image-edit';
import dotenv from 'dotenv';

dotenv.config();

const editor = new QwenImageEdit({
  apiKey: process.env.QWEN_API_KEY,
  region: process.env.QWEN_REGION || 'eu-west-1'
});

Python

# Mit pip
pip install qwen-image-edit

# Mit poetry
poetry add qwen-image-edit

Grundlegende Einrichtung:

import os
from qwen_image_edit import QwenImageEdit
from dotenv import load_dotenv

load_dotenv()

editor = QwenImageEdit(
    api_key=os.getenv('QWEN_API_KEY'),
    region=os.getenv('QWEN_REGION', 'eu-west-1')
)

PHP

composer require qwen/image-edit

Grundlegende Einrichtung:

<?php
require_once 'vendor/autoload.php';

use Qwen\ImageEdit\QwenImageEdit;

$editor = new QwenImageEdit([
    'apiKey' => $_ENV['QWEN_API_KEY'],
    'region' => $_ENV['QWEN_REGION'] ?? 'eu-west-1'
]);

Java

Maven:

<dependency>
    <groupId>ai.qwen</groupId>
    <artifactId>image-edit</artifactId>
    <version>1.0.0</version>
</dependency>

Gradle:

implementation 'ai.qwen:image-edit:1.0.0'

Grundlegende Einrichtung:

import ai.qwen.imageedit.QwenImageEdit;

QwenImageEdit editor = new QwenImageEdit.Builder()
    .apiKey(System.getenv("QWEN_API_KEY"))
    .region(System.getenv("QWEN_REGION"))
    .build();

Go

go get github.com/qwen-ai/image-edit-go

Grundlegende Einrichtung:

package main

import (
    "os"
    "github.com/qwen-ai/image-edit-go"
)

func main() {
    editor := qwenimageedit.New(&qwenimageedit.Config{
        APIKey: os.Getenv("QWEN_API_KEY"),
        Region: os.Getenv("QWEN_REGION"),
    })
}

Ruby

gem install qwen-image-edit

Grundlegende Einrichtung:

require 'qwen/image_edit'
require 'dotenv/load'

editor = Qwen::ImageEdit.new(
  api_key: ENV['QWEN_API_KEY'],
  region: ENV['QWEN_REGION'] || 'eu-west-1'
)

⚙️ Grundkonfiguration

Einfache Konfiguration

const editor = new QwenImageEdit({
  apiKey: process.env.QWEN_API_KEY,
  region: 'eu-west-1',
  timeout: 30000, // 30 Sekunden
  retries: 3
});

Erweiterte Konfiguration

const editor = new QwenImageEdit({
  apiKey: process.env.QWEN_API_KEY,
  region: 'eu-west-1',
  
  // Performance-Einstellungen
  timeout: 45000,
  retries: 3,
  
  // Cache-Konfiguration
  cache: {
    enabled: true,
    ttl: 3600, // 1 Stunde
    maxSize: 100 // Maximale Anzahl gecachter Elemente
  },
  
  // Logging
  logging: {
    level: 'info',
    destination: 'console'
  }
});

🎯 Erste Bearbeitungsschritte

1. Einfache Textbearbeitung

// Text in einem Bild ersetzen
const result = await editor.editText({
  image: './mein-poster.jpg',
  prompt: 'Ersetze "Konzert" durch "Festival"'
});

console.log('Bearbeitetes Bild:', result.imageUrl);
console.log('Verwendete Credits:', result.credits);

2. Element hinzufügen

// Logo zu einem Produktbild hinzufügen
const result = await editor.editElement({
  image: './produkt.jpg',
  prompt: 'Füge das Firmenlogo diskret in die untere rechte Ecke ein',
  element: {
    type: 'logo',
    size: 'small',
    opacity: 0.8
  }
});

console.log('Bild mit Logo:', result.imageUrl);

🔑 Hauptfunktionen

Textbearbeitung

// Verschiedene Textbearbeitungen
const beispiele = [
  {
    prompt: 'Übersetze allen Text ins Deutsche',
    beschreibung: 'Automatische Übersetzung'
  },
  {
    prompt: 'Ändere die Schriftfarbe zu Blau',
    beschreibung: 'Stilanpassung'
  },
  {
    prompt: 'Mache den Text größer und fetter',
    beschreibung: 'Formatierung'
  },
  {
    prompt: 'Ersetze "Sale" durch "Ausverkauf"',
    beschreibung: 'Spezifischer Austausch'
  }
];

for (const beispiel of beispiele) {
  const result = await editor.editText({
    image: './original.jpg',
    prompt: beispiel.prompt
  });
  
  console.log(`${beispiel.beschreibung}:`, result.imageUrl);
}

Elementmanipulation

// Verschiedene Elemente hinzufügen
const elementBeispiele = [
  {
    prompt: 'Füge ein Wasserzeichen "© 2024" hinzu',
    typ: 'Wasserzeichen'
  },
  {
    prompt: 'Platziere einen "NEU" Badge oben links',
    typ: 'Badge'
  },
  {
    prompt: 'Füge einen Preisaufkleber "19,99€" hinzu',
    typ: 'Preisschild'
  }
];

for (const beispiel of elementBeispiele) {
  const result = await editor.editElement({
    image: './basis-bild.jpg',
    prompt: beispiel.prompt
  });
  
  console.log(`${beispiel.typ} hinzugefügt:`, result.imageUrl);
}

Stil-Transfer

// Stil von einem Bild auf ein anderes übertragen
const stilResult = await editor.transferStyle({
  sourceImage: './mein-foto.jpg',
  styleImage: './kunstwerk.jpg',
  intensity: 0.7, // 70% Stilintensität
  preserveContent: true // Originalinhalt beibehalten
});

console.log('Stilisiertes Bild:', stilResult.imageUrl);

💡 Best Practices

Effektive Prompts

// ❌ Vage Prompts
const schlecht = await editor.editText({
  image: './bild.jpg',
  prompt: 'Ändere den Text'
});

// ✅ Spezifische Prompts
const gut = await editor.editText({
  image: './bild.jpg',
  prompt: 'Ersetze das Wort "Verkauf" im Haupttitel durch "Sonderangebot"'
});

// ✅ Kontextuelle Prompts
const sehrGut = await editor.editText({
  image: './restaurant-menu.jpg',
  prompt: 'Aktualisiere den Preis für "Pizza Margherita" von "12€" auf "14€"'
});

Performance-Optimierung

// Bildgröße vor der Verarbeitung optimieren
import sharp from 'sharp';

async function optimiereBild(bildPfad) {
  const optimiert = await sharp(bildPfad)
    .resize(2048, 2048, { fit: 'inside', withoutEnlargement: true })
    .jpeg({ quality: 85 })
    .toBuffer();
  
  return optimiert;
}

// Verwenden Sie das optimierte Bild
const optimiertesBild = await optimiereBild('./grosses-bild.jpg');
const result = await editor.editText({
  image: optimiertesBild,
  prompt: 'Bearbeite den Text'
});

Fehlerbehandlung

async function sichereBearbeitung(image, prompt) {
  try {
    const result = await editor.editText({ image, prompt });
    return {
      success: true,
      data: result
    };
  } catch (error) {
    console.error('Bearbeitungsfehler:', error.message);
    
    // Spezifische Fehlerbehandlung
    switch (error.code) {
      case 'INVALID_API_KEY':
        console.error('API-Schlüssel ungültig. Bitte überprüfen Sie Ihre Konfiguration.');
        break;
      case 'QUOTA_EXCEEDED':
        console.error('Monatliches Kontingent überschritten. Upgrade erforderlich.');
        break;
      case 'IMAGE_TOO_LARGE':
        console.error('Bild zu groß. Maximale Größe: 10MB');
        break;
      default:
        console.error('Unbekannter Fehler:', error.code);
    }
    
    return {
      success: false,
      error: error.message
    };
  }
}

// Verwendung
const result = await sichereBearbeitung('./bild.jpg', 'Bearbeite den Text');
if (result.success) {
  console.log('Erfolgreich bearbeitet:', result.data.imageUrl);
} else {
  console.log('Bearbeitung fehlgeschlagen:', result.error);
}

🎨 Praktische Beispiele

Marketing-Lokalisierung

// Automatische Lokalisierung für verschiedene Märkte
const maerkte = [
  { sprache: 'Deutsch', region: 'Deutschland' },
  { sprache: 'Französisch', region: 'Frankreich' },
  { sprache: 'Spanisch', region: 'Spanien' }
];

const lokalisierungen = await Promise.all(
  maerkte.map(async (markt) => {
    const result = await editor.editText({
      image: './kampagne-original.jpg',
      prompt: `Übersetze allen Text ins ${markt.sprache} und passe kulturelle Referenzen für ${markt.region} an`
    });
    
    return {
      markt: markt.region,
      bild: result.imageUrl
    };
  })
);

console.log('Lokalisierte Kampagnen:', lokalisierungen);

E-Commerce Batch-Verarbeitung

// Preise in einem Produktkatalog aktualisieren
const produkte = [
  { bild: './produkt1.jpg', alterPreis: '29,99€', neuerPreis: '24,99€' },
  { bild: './produkt2.jpg', alterPreis: '49,99€', neuerPreis: '39,99€' },
  { bild: './produkt3.jpg', alterPreis: '19,99€', neuerPreis: '16,99€' }
];

const aktualisierteProdukte = await Promise.all(
  produkte.map(async (produkt) => {
    const result = await editor.editText({
      image: produkt.bild,
      prompt: `Ersetze "${produkt.alterPreis}" durch "${produkt.neuerPreis}" und füge einen roten "SALE" Badge hinzu`
    });
    
    return {
      original: produkt.bild,
      aktualisiert: result.imageUrl,
      preisaenderung: `${produkt.alterPreis} → ${produkt.neuerPreis}`
    };
  })
);

console.log('Aktualisierte Produkte:', aktualisierteProdukte);

Content-Erstellung für Social Media

// Verschiedene Formate für verschiedene Plattformen erstellen
const plattformen = [
  { name: 'Instagram', format: 'quadratisch', groesse: '1080x1080' },
  { name: 'Facebook', format: 'landschaft', groesse: '1200x630' },
  { name: 'Twitter', format: 'landschaft', groesse: '1024x512' },
  { name: 'LinkedIn', format: 'landschaft', groesse: '1200x627' }
];

const socialMediaInhalte = await Promise.all(
  plattformen.map(async (plattform) => {
    // Erst das Bild für die Plattform anpassen
    const angepasstesBild = await editor.resizeImage({
      image: './original-content.jpg',
      dimensions: plattform.groesse,
      maintainAspectRatio: false
    });
    
    // Dann plattformspezifische Elemente hinzufügen
    const result = await editor.editElement({
      image: angepasstesBild.imageUrl,
      prompt: `Füge das ${plattform.name} Logo und optimiere für ${plattform.format} Format`
    });
    
    return {
      plattform: plattform.name,
      bild: result.imageUrl,
      format: plattform.format
    };
  })
);

console.log('Social Media Inhalte:', socialMediaInhalte);

🔍 Bildanalyse

Grundlegende Analyse

// Umfassende Bildanalyse
const analyse = await editor.analyzeImage({
  image: './zu-analysierendes-bild.jpg',
  options: {
    detectText: true,
    detectObjects: true,
    extractColors: true,
    assessQuality: true
  }
});

console.log('Gefundener Text:', analyse.text);
console.log('Erkannte Objekte:', analyse.objects);
console.log('Farbpalette:', analyse.colors);
console.log('Bildqualität:', analyse.quality);

Bedingte Bearbeitung basierend auf Analyse

// Erst analysieren, dann basierend auf Ergebnissen bearbeiten
const analyse = await editor.analyzeImage({
  image: './bild.jpg',
  options: { detectText: true, assessQuality: true }
});

let bearbeitungsPrompt = '';

// Bearbeitung basierend auf gefundenem Text
if (analyse.text && analyse.text.length > 0) {
  const englischerText = analyse.text.find(t => t.language === 'en');
  if (englischerText) {
    bearbeitungsPrompt += 'Übersetze englischen Text ins Deutsche. ';
  }
}

// Bearbeitung basierend auf Bildqualität
if (analyse.quality && analyse.quality.overall < 0.7) {
  bearbeitungsPrompt += 'Verbessere Bildschärfe und Kontrast. ';
}

// Bearbeitung nur durchführen, wenn nötig
if (bearbeitungsPrompt) {
  const result = await editor.editText({
    image: './bild.jpg',
    prompt: bearbeitungsPrompt.trim()
  });
  
  console.log('Bedingte Bearbeitung abgeschlossen:', result.imageUrl);
} else {
  console.log('Keine Bearbeitung erforderlich');
}

📦 Batch-Verarbeitung

Parallele Verarbeitung mit Begrenzung

import pLimit from 'p-limit';

// Begrenzen Sie die Anzahl gleichzeitiger Anfragen
const limit = pLimit(3); // Maximal 3 gleichzeitige Bearbeitungen

const bilder = [
  './bild1.jpg',
  './bild2.jpg',
  './bild3.jpg',
  './bild4.jpg',
  './bild5.jpg'
];

const ergebnisse = await Promise.allSettled(
  bilder.map(bild => 
    limit(() => editor.editText({
      image: bild,
      prompt: 'Verbessere die Bildqualität und übersetze Text ins Deutsche'
    }))
  )
);

// Ergebnisse verarbeiten
const erfolgreich = ergebnisse.filter(r => r.status === 'fulfilled');
const fehlgeschlagen = ergebnisse.filter(r => r.status === 'rejected');

console.log(`${erfolgreich.length} Bilder erfolgreich bearbeitet`);
console.log(`${fehlgeschlagen.length} Bilder fehlgeschlagen`);

🎯 Nächste Schritte

Jetzt, da Sie die Grundlagen beherrschen, erkunden Sie erweiterte Funktionen:

💡 Erweiterte Beispiele

Entdecken Sie komplexe Anwendungsfälle und fortgeschrittene Techniken.

Beispiele Erkunden

📚 API-Referenz

Vollständige Dokumentation aller verfügbaren Methoden und Parameter.

API-Dokumentation

⚙️ Konfiguration

Optimieren Sie Performance und Sicherheit mit erweiterten Einstellungen.

Konfiguration

🔧 Fehlerbehebung

Lösen Sie häufige Probleme und optimieren Sie Ihre Implementierung.

Fehlerbehebung