From c9796b8431e3b50fa104ec2a34f942730656d336 Mon Sep 17 00:00:00 2001 From: Dennis Heinrich Date: Sun, 6 Apr 2025 14:19:38 +0200 Subject: [PATCH] Bilder verkleinert speichern und Anleitung erstellt --- README.md | 7 +++++++ assets/script/calculator.js | 29 ++++++++++++++++++++++++----- index.html | 2 +- 3 files changed, 32 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index d8794ae..b91fe51 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,13 @@ genügt). > Weitere Screenshots sind im Ordner `.github/screenshots` zu finden. +## Anleitung und Hinweise + +- Die Anwendung ist unter erreichbar. +- Die Anwendung kann auch lokal genutzt werden. Dazu einfach die Startseite einmal im Browser öffnen. +- Neue Produkte können im Bereich 'Einstellungen' hinzugefügt werden, Produktbilder sollten im Format 1:1 sein und idealerweise 150x150px. +- Die angelegten Produkte können auf andere Geräte übertragen werden in den Einstellungen. Einfach den Text aus dem Feld Export/Import entweder herauskopieren oder einfügen. + ## Entwicklung und Installation ```bash diff --git a/assets/script/calculator.js b/assets/script/calculator.js index 82a801e..1fe07e9 100644 --- a/assets/script/calculator.js +++ b/assets/script/calculator.js @@ -200,6 +200,24 @@ class Base64Image { }); } + static imageResize(base64) { + return new Promise((resolve, reject) => { + const img = new Image(); + img.crossOrigin = 'Anonymous'; + img.onload = () => { + const canvas = document.createElement('canvas'); + canvas.width = 250; + canvas.height = 250; + const ctx = canvas.getContext('2d'); + ctx.drawImage(img, 0, 0, canvas.width, canvas.height); + const dataUrl = canvas.toDataURL(); + resolve(dataUrl); + }; + img.onerror = reject; + img.src = base64; + }); + } + /** * Convert a file to a base64 string * @param file @@ -266,7 +284,7 @@ class ProductManager { * Register events for the create new product button. */ registerSettingsFormEvents() { - Element.getCreateNewProductButton().addEventListener('click', (e) => { + Element.getCreateNewProductButton().addEventListener('click', async (e) => { e.preventDefault(); const name = document.querySelector('#product-name').value; @@ -274,7 +292,7 @@ class ProductManager { const image = document.querySelector('#product-image').files[0]; // Validate price - if(name.length === 0) { + if (name.length === 0) { alert('Name muss ausgefüllt sein'); return; } @@ -282,12 +300,13 @@ class ProductManager { // Turn image into base64 or use placeholder image if (image) { const imageSrcWithBase64 = Base64Image.fromFile(image); - imageSrcWithBase64.then(imageSrcWithBase64 => { - productManager.addProduct(new Product(name, price, imageSrcWithBase64)); + imageSrcWithBase64.then(async imageSrcWithBase64 => { + productManager.addProduct(new Product(name, price, await Base64Image.imageResize(imageSrcWithBase64))); ProductManager.resetProductSettingsForm(); }); } else { - productManager.addProduct(new Product(name, price, Base64Image.fromImageUrl('https://placehold.co/250x250?text={${name}}'))); + let image1 = await Base64Image.imageResize(await Base64Image.fromImageUrl(`https://placehold.co/250x250?text=${name}`)); + productManager.addProduct(new Product(name, price, image1)); ProductManager.resetProductSettingsForm(); } }); diff --git a/index.html b/index.html index ce7d41a..dce857e 100644 --- a/index.html +++ b/index.html @@ -84,7 +84,7 @@