Konvertierung von Heic/Heif zu PNG via ImageMagick

Installation von ImageMagick

Um den ImageMagickConvertNode nutzen zu können, müssen zunächst folgende Voraussetzungen geschaffen werden:

  • Installation von ImageMagick

  • Unter Linux ist keine weitere Anpassung notwendig

  • Unter Windows sind zwei Anpassungen notwendig:
    1. Bei der Installation muss die Checkbox für "Install legacy utilities (e.g. convert)" gewählt werden 
    2. Zudem muss eine Anpassung der Datei  /server-config/imagemagick/imagemagick.xml erfolgen. Unter <bean id="imagemagick" …> muss ein Element eingefügt werden, das folgenden Inhalt hat: <property name="imageMagickSearchPath" value="<Ort des Ordners der ImageMagick-Installation>"/>

Information zur Lizenz

Die Installation von ImageMagick wird nicht mit dem jadice server 5 ausgeliefert und muss wie oben beschrieben durchgeführt werden. Die Lizenz von ImageMagick erlaubt eine private, firmeninterne sowie kommerzielle Nutzung (Stand: 30.04.2021). Weitere Details können hier entnommen werden.

Funktionsumfang

Der Node unterstützt die Umwandlung von Bildern im Heic/Heif Format zu PNG. Zudem kann die maximale Größe (Breite, Höhe in Pixel) des umgewandelten Bildes begrenzt werden. Sollte das Ursprungsbild kleiner sein, findet keine Anpassung der Größe statt.


Senden eines Jobs via ImageMagickConvertNode

Der folgende Code-Block zeigt schematisch die notwendigen Schritte:

// JobFactory mit Verbindung zum Messaging-System erstellen
JMSJobFactroy jobFactory = new JMSJobFactory(...);

// Job erstellen und konfigurieren
Job job = jobFactory.createJob();

final StreamInputNode siNode = new StreamInputNode();
final StreamOutputNode soNode = new StreamOutputNode();

final ImageMagickConvertNode converterNode = new ImageMagickConvertNode();

// Maximale Größe des PNGs angeben - hier als Beispiele mit Breite 400 und Höhe 300
int width = 400;
int height = 300;
converterNode.setMaxImageSize(width, height);

job.attach(//
	siNode.appendSuccessor(converterNode)
		  .appendSuccessor(soNode));

// Job abschicken
job.submit();

// Eingabedaten senden
final File file = ...
final InpusStream inputStream = new FileInputStream(file);

final StreamDescriptor streamDescriptor = new StreamDescriptor();
sd.setFileName(file.getName());

Stream bundledStream = new BundledStream(inputStream, streamDescriptor);

siNode.addStream(bundledStream);
siNode.complete();

// Resultat abholen
for (Stream stream : soNode.getStreamBundle()) {
...
}

Automatische Verarbeitung

DynamicPipelineNode

Um erkannte Heic/Heif Bilder in der DynamicPipelineNode zu verarbeiten, kann folgende Regel zum verwendeten Regelsatz, standardmäßig in der Datei server-config/dynamic-pipeline-rules/default.xml, hinzugefügt werden:

	<rule name="Render HEIC/HEIF with ImageMagick worker">
		<type>image/heif</type>
		<type>image/heic</type>
		<type>image/heif-sequence</type>
		<type>image/heic-sequence</type>
		<node class="com.levigo.jadice.server.imagemagick.ImageMagickConvertNode" />
		<loopback />
	</rule>

Email-Konvertierung

Damit Heic/Heif Bilder in Emails verarbeitet werden können, kann im Skript email-conversion/EmailConversion.groovy folgender Fall am Ende der Switch-Anweisung ergänzt werden:

case ["image/heif", "image/heic", "image/heif-sequence", "image/heic-sequence"]:
  support.info("Converting $input.descriptor.baseType to PNG");
  handleAttachment(input, doCreateCover)
  process() {
    com.levigo.jadice.server.nodes.DynamicPipelineNode()
  }
  break