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:
- Registrieren Sie sich oder melden Sie sich an
- Navigieren Sie zu "API Keys"
- Erstellen Sie einen neuen Schlüssel
- 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 Europaus-east-1
(Virginia) - Empfohlen für Nordamerikaap-southeast-1
(Singapur) - Empfohlen für Asienap-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
⚙️ Konfiguration
Optimieren Sie Performance und Sicherheit mit erweiterten Einstellungen.
Konfiguration