Mit Intrexx 5 oder mit dem Online Update 19 für Version 4.5 erhalten Kunden die Möglichkeit, innerhalb von Groovy-Skripten ein Hilfsmittel einzusetzen, um neue oder vorhandene Bilder automatisiert zu skalieren.
In diesem Beispiel wird anhand einer einfachen Applikation gezeigt, wie zu einem Bild, welches im Portal hochgeladen wird, ein passendes Thumbnail-Bild in geringer Größe und Auflösung erstellt werden kann. Das manuelle Bereitstellen verschiedener Bildergrößen durch einen Benutzer wird somit nicht mehr notwendig sein. Interessant ist diese Anwendung beispielsweise im Zusammenhang mit Shopapplikationen, in denen Thumbnails in kleiner Auflösung als Vorschau zur Verfügung stehen sollten.
Wechseln Sie in den Applikationsdesigner und erstellen Sie eine Applikation aus der Vorlage
Leere Applikation. Geben Sie dieser einen geeigneten Namen, z.B.
Artikelbilder und benennen Sie die Datengruppe um in
Bilder.

Legen Sie auf der Eingabeseite der Datengruppe neue Eingabefelder für Bildtitel und eine Bilddatei an. Zusätzlich werden noch Schaltflächen zum Speichern und Löschen benötigt. Haben Sie diese Elemente angelegt, sollte ihre Eingabeseite in etwa so aussehen wie auf folgendem Screenshot:
Optional können Sie auf der Hauptseite der Applikation eine Ansichtstabelle anlegen, die die vorhandenen Datensätze anzeigt.
Speichern und veröffentlichen Sie die Applikation und wechseln Sie in den
Prozess Manager. Erstellen Sie einen neuen Prozess und geben Sie diesem einen geeigneten Namen, z.B.
Artikelbilder: Thumbnail erstellen.
Definieren Sie ein Datengruppenereignis (Version 4.5) oder einen Datengruppen-Ereignisbehandler (Version 5), das auf das Einfügen neuer Artikelbilder in die Datengruppe Bilder hört. In der Version 4.5 wählen Sie als zugehörige Bedingung die Option "Immer". Die Aktion, die auf das Ereignis
Einfügen in
Bilder reagiert, ist eine Groovy-Skript Aktion.
Nach dieser Definition sollte der Prozess in etwa wie folgt aussehen:
Öffnen Sie nun in der Groovy-Skript Aktion den Editor und definieren Sie folgendes Skript:
import de.uplanet.lucy.server.scripting.groovy.ImageHelper
// datafield Bildauswahl
def fileImage = g_record["GUID_DATENFELD_BILD"]
def strFileName = fileImage.fileName
def strThumbnailName = "${strFileName[0..strFileName.lastIndexOf(".")-1]}_thumbnail.png"
if(ImageHelper.isSupportedImageFormat(fileImage.path))
ImageHelper.scaleImage(inputFile:fileImage.path, outputFile:"internal/files/${g_record.applicationGuid}/${strThumbnailName}", maxWidth:100, maxHeight:100)
else
g_log.error("Error creating thumbnail for ${strFileName}. Format is not supported.")
In der ersten Zeile wird per import-Statement die zum Skalieren benötigte Klasse
ImageHelper eingebunden.
Anschließend werden die benötigten Variablen definiert.
Mit
def fileImage = g_record["GUID_DATENFELD_BILD"]
erhält man das Bild, das über die Dateiuploadkontrolle in die Applikation geladen wurde. Innerhalb der eckigen Klammern wird die GUID des Datenfelds benötigt, in dem das Bild abgespeichert wird. Diese erhalten Sie, wenn Sie im Groovy-Editor entweder mit der rechten Maustaste oder über

das Kontextmenü öffnen. Hierbei erhalten Sie eine Auswahl der verfügbaren Datenfelder der aktuellen Datengruppe. Wählen Sie hier das Dateidatenfeld. Es wird automatisch der korrekte
g_record-Ausdruck in das Skript eingefügt.
Mit den beiden Zeilen
def strFileName = fileImage.fileName
def strThumbnailName = "${strFileName[0..strFileName.lastIndexOf(".")-1]}_thumbnail.png"
erstellen Sie einen neuen Dateinamen für das Thumbnail-Bild. Hierbei wird zur besseren Identifikation an den ursprünglichen Dateinamen das Suffix
_thumbnail angehängt. Weiter wird in diesem Beispiel das generierte Thumbnail im Format
png abgespeichert. Dieses Format kann bei Bedarf verändert werden. Unterstützt werden die Formate
PNG, JPEG und
BMP.
Im nächsten Schritt wird überprüft, ob es sich bei dem übergebenen Bild um ein unterstütztes Format handelt oder nicht. Im Falle eines gültigen Formats wird zum Bild ein skaliertes Thumbnail erstellt.
Sollte ein Format vorliegen, das von der Klasse ImageHelper nicht unterstützt wird, wird eine entsprechende Fehlermeldung in die Log-Datei des Portals (in Version 4.5,
<xtreme>/org/<portalname>/log/portal.log) bzw. in die Prozess-Log-Datei (in Version 5,
<intrexx>/org/<portalname>/log/workflow.log) ausgegeben.
Die eigentliche Skalierung des ursprünglichen Bildes erfolgt über die
scaleImage-Methode des ImageHelpers.
ImageHelper.scaleImage(inputFile:fileImage.path, outputFile:"internal/files/${g_record.applicationGuid}/${strThumbnailName}", maxWidth:100, maxHeight:100)
Der Aufruf dieser Methode erfolgt über sogenannte
named parameter. Dies bedeutet, dass die Parameter in der Form
parameter:wert übergeben werden und die Parameter einen fest definierten Namen besitzen. Die beiden Parameter
inputFile und
outputFile sind Pflichtparameter, alle weiteren sind optional.
| Name |
Beschreibung |
| inputFile |
Die Eingabedatei als File-Objekt (java.io.File) oder als String (Pfadangabe relativ zum Portalverzeichnis). Pflichtparameter |
| outputFile |
Die Ausgabedatei als File-Objekt (java.io.File) oder als String (Pfadangabe relativ zum Portalverzeichnis). Pflichtparameter |
| format |
Ausgabeformat des skalierten Bildes (PNG, JPEG oder BMP). Defaultwert ist hierbei PNG. |
| width |
Die Breite des skalierten Bildes. |
| height |
Die Höhe des skalierten Bildes. |
| maxWidth |
Die maximale Breite des skalierten Bildes. Das Bild wird auf diesen Wert unter Beibehaltung der Seitenverhältnisse skaliert. |
| maxHeight |
Die maximale Höhe des skalierten Bildes. Das Bild wird auf diesen Wert unter Beibehaltung der Seitenverhältnisse skaliert. |
| scaleX |
Der horizontale Skalierungsfaktor, mit dem das Bild skaliert wird. |
| scaleY |
Der vertikale Skalierungsfaktor, mit dem das Bild skaliert wird. |
| shrinkOnly |
Ist dieser Parameter auf true gesetzt, wird das Bild nur skaliert, wenn das resultierende Bild kleiner als das ursprüngliche Bild ist.
Dieser Parameter kann nur in Verbindung mit maxWidth oder maxHeight verwendet werden. |
Hinweis:
Folgende Parameter schließen sich gegenseitig aus und können nicht gemeinsam verwendet werden:
width, maxWidth und
scaleX
bzw.
height, maxHeight und
scaleY
Schließen Sie den Skripteditor und veröffentlichen Sie den Prozess auf dem Server.
Rufen Sie nun die Applikation im Browser auf und laden Sie ein neues Bild in das Portal hoch. Beim Speichern wird der Prozess ausgeführt und es wird ein skaliertes Bild in das Verzeichnis gespeichert.
Verzeichnisname in Version 4.5:
<xtreme>/org/<portalname>/internal/files/<Applikations-GUID>/
Verzeichnisname in Version 5:
<intrexx>/org/<portalname>/internal/files/<Applikations-GUID>/