Was brauchen wir für das Werkzeug:
→ Ordnerstruktur & Dateien (siehe How to: Basic Setup)
→ OpenAI-API Key (siehe How to: API)
→ Browser (funktioniert am besten mit Chrome)
→ Browser Erweiterung (siehe How-to: CORS Erweiterung)
→ Text-Editor (zb. SublimeText)
Die index.html beinhaltet u.A.:
→ <h1> Überschrift (optional)
→ <p> Anleitungstext (optional)
→ <input> zum Prompt eingeben und <button> zum Generieren
→ <div> image-section in der die generierten Bilder erscheinen
1. Öffne die index.html
Du kannst den Code kopieren und in deine Datei einfügen:
<!DOCTYPE html>
<html>
<head>
<title>Headline</title>
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<body>
<h1>Headline Letter Generator</h1>
<p>Generiere Buchstaben im dem Stil deiner Wahl. <br>
Wenn der Buchstabe erscheint, kannst du ihn auf der Fläche hin und her ziehen.</p>
<input placeholder="Letter A in the style of XX" />
<button id="generateButton">Generieren</button>
<div class="image-section"></div>
<script src="js/script.js"></script>
</body>
</html>
2. Speicher die index.html
1. Öffne die style.css
Die style.css beinhaltet:
→ *{} Zurücksetzen auf den Default Style
→ body{} Definieren der Größe der "Leinwand"
→ h1{}, p{}, .draggable{} basic Styling (optinal)
→ .image-section img{} Definieren des Filters für die Buchstaben (wichtig!)
Du kannst den Code kopieren und in deine style.css Datei einfügen:
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
width: 100vw;
height: 100vh;
}
h1 {
margin: 20px;
}
p {
margin: 0 20px 20px 20px;
}
input {
margin: 0 0 20px 20px;
}
.image-section img {
mix-blend-mode: multiply;
filter: grayscale(100%) brightness(93%) hue-rotate(360deg) saturate(1000%) contrast(1000%);
}
.draggable {
cursor: grab;
}
.draggable:active,
.draggable.dragging {
cursor: grabbing;
}
2. Speicher die style.css
Die script.js beinhaltet folgende Funktionen:
→ getImages: Ruft Bilder von einer API ab und fügt sie der Seite hinzu
→ handleGenerateButtonClick: Wird beim Klick auf den "Generate"-Button aufgerufen und ruft getImages auf
→ makeImagesDraggable: Macht die generierten Bilder per Drag & Drop verschiebbar
1. Öffne die script.js
Du kannst den Code kopieren und in deine script.js Datei einfügen:
const API_KEY = "DEIN_API_KEY";
const generateButton = document.querySelector('#generateButton');
const inputElement = document.querySelector('input');
const imageSection = document.querySelector(".image-section");
const getImages = async () => {
const options = {
method: "POST",
headers: {
"Authorization": `Bearer ${API_KEY}`,
"Content-Type": 'application/json'
},
body: JSON.stringify({
"prompt": inputElement.value + ", black and white, no shadows, extreme white background, 4k",
"n": 1,
"size": "256x256"
})
};
try {
const response = await fetch('https://api.openai.com/v1/images/generations', options);
const data = await response.json();
data?.data.forEach(imageObject => {
const image = new Image();
image.src = imageObject.url;
image.classList.add('draggable');
image.draggable = true;
imageSection.appendChild(image);
});
generateButton.textContent = "Generieren";
makeImagesDraggable();
} catch (error) {
console.error(error);
}
};
const handleGenerateButtonClick = () => {
generateButton.textContent = "Loading...";
getImages();
};
generateButton.addEventListener('click', handleGenerateButtonClick);
const imageSize = 256;
let draggableImage = null;
let dragOffsetX = 0;
let dragOffsetY = 0;
const makeImagesDraggable = () => {
document.body.addEventListener('dragstart', (e) => {
if (e.target.classList.contains('draggable')) {
draggableImage = e.target;
const boundingRect = draggableImage.getBoundingClientRect();
dragOffsetX = e.clientX - boundingRect.left;
dragOffsetY = e.clientY - boundingRect.top;
e.stopPropagation();
}
});
document.body.addEventListener('dragend', () => {
draggableImage = null;
});
document.body.addEventListener('dragover', (e) => {
e.preventDefault();
});
document.body.addEventListener('drop', (e) => {
e.preventDefault();
if (draggableImage) {
const x = e.clientX - dragOffsetX;
const y = e.clientY - dragOffsetY;
draggableImage.style.position = 'fixed';
draggableImage.style.width = `${imageSize}px`;
draggableImage.style.height = `${imageSize}px`;
draggableImage.style.left = `${x}px`;
draggableImage.style.top = `${y}px`;
}
});
};
2. Füge deinen API Key in dieses Feld ein: "DEIN_API_KEY"
3. Speicher die script.js