Die Optimierung der Bildkonvertierung ist eine weit verbreitete Herausforderung von globalen Medien- und Nachrichtenunternehmen. In den letzten Wochen haben wir an einem Anwendungsfall eines solchen Unternehmens gearbeitet. Eine zentrale Funktion der Nuxeo Platform sollte das Importieren von bis zu 15.000 hochauflösenden jpeg-Bildern pro Stunde einschließlich Indexierung und Umwandlung in Beinahe-Echtzeit sein, damit Assets praktisch direkt nach ihrer Erfassung abrufbar und per Vorschau verfügbar waren. Es gab keinen Zweifel daran, dass die Nuxeo Platform dies bewältigen konnte (dank ihrer außerordentlich skalierbaren Architektur), die Frage lautete vielmehr, wie dies mit der geringstmöglichen Infrastruktur erreicht werden konnte.

Die Nuxeo Platform integriert für Bildkonvertierungen Imagemagick, ein unglaublich vielseitiges Tool für Bildumwandlungen. Wir konzentrieren uns hier auf das Ändern der Größe. Sobald ein Bild auf die Plattform hochgeladen wird, werden mehrere Umwandlungen durchgeführt, um verschiedene Auflösungen des Originals zu erhalten: Miniaturansicht, Vorschau usw. Der standardmäßige IM-Befehl, der von der Plattform verwendet wird, ist sehr allgemein und funktioniert daher in praktisch jeder Situation. Wir empfehlen, zunächst mit der Plattform zu beginnen. Sobald Sie jedoch mit der Plattform vertraut sind, können Sie diese für Ihren spezifischen Anwendungsfall optimieren.

Den Standardkonverter zu überschreiben ist genauso einfach, wie ihn in Nuxeo Studio neu zu definieren. Nachfolgend finden Sie einen Befehl, der die CPU weniger beansprucht als der Standardbefehl:

<extension point="command" target="org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent">
    <command enabled="true" name="jpegResizer">
      <commandLine>convert</commandLine>
      <parameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -depth #{targetDepth} -scale #{targetWidth}x#{targetHeight} #{inputFilePath} #{outputFilePath}</parameterString>
      <installationDirective>You need to install ImageMagick.</installationDirective>
    </command>
</extension>

Wir haben sowohl den Standard- als auch den optimierten Konverter auf einer c3.xlarge (4 CPUs/8 GB RAM) Instanz von AWS unter Verwendung eines Satzes mit 150 Bildern mit einer durchschnittlichen Größe von 5 MB bei einer Auflösung von 18 MP getestet. Hier ist das Ergebnis:

Vergleich-Resize
Standardkonverter im Vergleich zum optimierten JPEG-Größenkonverter

Bereits mit wenigen Konfigurationszeilen konnten wir eine unglaubliche Steigerung bei der Bildverarbeitung um 100 % erreichen. Es wird jedoch noch besser. Imagemagick bietet viele verschiedene Algorithmen zur Größenänderung von Bildern. Wir möchten uns drei davon ansehen, vom schnellsten zum langsamsten: sample, scale, und resize.

Algorithmusvergleich
Algorithmusvergleich zur Größenänderung

Die oben abgebildeten Werte zeigen, dass sich die Menge der Bildverarbeitung verdoppelt, sobald man von resize auf scale wechselt, und diese sich bei sample noch weiter erhöht. Dies ergibt jedoch nur dann Sinn, wenn die Qualität der Ausgabebilder so gut ist, dass sie verwendbar sind.

Ergebnisse
Ausgabebilder

Die Qualität bei sample ist erkennbar schlechter. Auf der anderen Seite fällt es schwer, einen Unterschied zwischen scale und resize zu erkennen. Dies ist hervorragend, da wir kostenlos die 4-fache Bildverarbeitungsmenge erhalten!

Zu guter Letzt können Sie die Menge der Bildverarbeitung weiter steigern, indem Sie Graphicsmagick anstelle von ImageMagick verwenden. Es ist nicht so vielseitig (keine Unterstützung von Photoshop-Dateien), ist dafür jedoch schneller bei jpeg-Bildern.

Vergleich zwischen Graphicsmagick und Imagemagick

Letzten Endes kommt es auf den Anwendungsfall und die erforderlichen Umwandlungen an. Denken Sie daran, dass Sie für jede Umwandlung einen anderen Befehl verwenden können, wodurch Sie viele Möglichkeiten für weitere Verbesserungen haben.