diff --git a/engomo/javascript_base64_fotos.md b/engomo/javascript_base64_fotos.md new file mode 100644 index 0000000..bbaf4e5 --- /dev/null +++ b/engomo/javascript_base64_fotos.md @@ -0,0 +1,115 @@ +# Javascript zum Fotos als base64 in Datenbank zu schreiben + +Zusätzlich zu den Originalfotos wird auch ein Thumbnail mit 10% größe erstellt. + +```java +// 1. Java‑Typen holen +var Base64 = Java.type('java.util.Base64'); +var ByteArrayInputStream = Java.type('java.io.ByteArrayInputStream'); +var ByteArrayOutputStream= Java.type('java.io.ByteArrayOutputStream'); +var ImageIO = Java.type('javax.imageio.ImageIO'); +var BufferedImage = Java.type('java.awt.image.BufferedImage'); +var AffineTransform = Java.type('java.awt.geom.AffineTransform'); +var AffineTransformOp = Java.type('java.awt.image.AffineTransformOp'); + +// 2. Höchste Medien‑ID für diese protokoll_id und raum_id ermitteln +var hochste_medien_id = 0; +try { + var dataArray = datasourceHelper.get("SQL-hochste_medien_id"); + if (dataArray && dataArray.getRows().size() > 0) { + var firstRow = dataArray.getRow(0); + if (firstRow && firstRow.getFieldAsString("MEDIEN_ID")) { + hochste_medien_id = parseInt("" + firstRow.getFieldAsString("MEDIEN_ID"), 10); + } + } +} catch (e) { + // Falls die Abfrage fehlschlägt, bleibt hochste_medien_id bei 0 +} + +// 3. Base64‑Bilder aufsplitten +var medienBildValue = medien_bild.getValue() || ""; +var base64Imgs = []; +if (medienBildValue) { + var splitValues = medienBildValue.split(";"); + for (var i = 0; i < splitValues.length; i++) { + var val = splitValues[i].trim(); + if (val) { + base64Imgs.push(val); + } + } +} + +// 4. Zustands‑Variablen +var protokoll_id = "" + (state.protokoll_id || ''); +var raum_id = "" + (state.raum_id || ''); +var raum_bezeichnung = "" + (state.raum_bezeichnung || 'default_raum_bezeichnung'); +var medien_beschreibung_val = "" + (medien_beschreibung.getValue() || ''); + +// 5. Funktion für Thumbnails +function makeThumbnail(base64String, scale) { + try { + var bytes = Base64.getDecoder().decode(base64String); + var inStream = new ByteArrayInputStream(bytes); + var img = ImageIO.read(inStream); + + var newW = Math.round(img.getWidth() * scale); + var newH = Math.round(img.getHeight() * scale); + + var thumb = new BufferedImage(newW, newH, img.getType()); + + var at = new AffineTransform(); + at.scale(newW / img.getWidth(), newH / img.getHeight()); + var op = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR); + thumb = op.filter(img, thumb); + + var outStream = new ByteArrayOutputStream(); + ImageIO.write(thumb, 'png', outStream); + var thumbBytes = outStream.toByteArray(); + return Base64.getEncoder().encodeToString(thumbBytes); + } catch (e) { + return ""; + } +} + +// 6. Bilder einzeln verarbeiten +for (var idx = 0; idx < base64Imgs.length; idx++) { + try { + // Wenn hochste_medien_id 0 ist, beginnen wir mit 1, sonst hochste_medien_id + 1 + var newMedienNum = hochste_medien_id === 0 ? idx + 1 : hochste_medien_id + idx + 1; + var newMedienId = "" + newMedienNum; + var base64String = base64Imgs[idx]; + var thumbnailString = ""; + + try { + thumbnailString = makeThumbnail(base64String, 0.1); + } catch (e) { + // Fehler beim Thumbnail abfangen + } + + // SQL-Statement erstellen + state.medien_id = newMedienId; + state.sql = + "INSERT INTO [engomo].[dbo].[begehung_raume_medien] " + + "(protokoll_id, raum_id, raum_bezeichnung, medien_id, medien_bild, medien_thumb, medien_beschreibung) " + + "VALUES (" + + "'" + protokoll_id + "', " + + "'" + raum_id + "', " + + "'" + raum_bezeichnung + "', " + + "'" + newMedienId + "', " + + "N'" + base64String + "', " + + "N'" + thumbnailString + "', " + + "N'" + medien_beschreibung_val + "'" + + ");"; + + // SQL ausführen + flowHelper.execute('dynamicSQL'); + + // Kurze Pause zwischen den Einfügungen + java.lang.Thread.sleep(100); + + } catch (e) { + // Bei Fehler fortfahren mit dem nächsten Bild + continue; + } +} +``` \ No newline at end of file