Ich kenne was, was Du nicht kennst: Light Weight Image Processor

Der Nachteil bei den meisten Node.js-Modulen für die Bildbearbeitung ist, dass sie lediglich Wrapper um bereits existierende Tools sind und somit zusätzliche Installationen voraussetzen. Doch nicht immer möchte man solche Abhängigkeiten haben. Hier setzt LWIP an.

In Pocket speichern vorlesen Druckansicht 1 Kommentar lesen
Lesezeit: 4 Min.
Von
  • Philip Ackermann
Inhaltsverzeichnis

Der Nachteil bei den meisten Node.js-Modulen für die Bildbearbeitung ist, dass sie lediglich Wrapper um bereits existierende Tools sind und somit zusätzliche Installationen voraussetzen. Doch nicht immer möchte man solche Abhängigkeiten haben. Hier setzt LWIP an.

Mehr Infos

Neue Artikelserie

"Ich kenne was, was Du nicht kennst" ist eine gemeinsame Serie von Golo Roden und Philip Ackermann, in der die beiden regelmäßig Module für JavaScript und Node.js vorstellen.

Node.js-Module für die Bildbearbeitung gibt es einige. Der Nachteil ist in den meisten Fällen jedoch, dass diese Module lediglich Wrapper um existierende Tools wie ImageMagick oder GraphicsMagick darstellen und somit eine Installation entsprechender Werkzeuge voraussetzen (die Module node-imagemagick und gm sind hier zwei Beispiele). Doch nicht immer möchte man solche Abhängigkeiten haben.

Das ist der Punkt, an dem das Modul LWIP (für "Light Weight Image Processor") ansetzt, denn dieses Modul benötigt keine externen Tools und lässt sich somit relativ unkompliziert "out of the box" (installiertes Node.js vorausgesetzt) auf verschiedenen Betriebssystemumgebungen nutzen. Installiert wird das Modul wie gewohnt über den Befehl npm install lwip, eingebunden ebenfalls wie bei Node.js-Modulen üblich über require('lwip').

Den Einstiegspunkt für das Bearbeiten von Bildern bietet anschließend die Methode open(). Übergeben wird ihr entweder der Pfad zu der entsprechenden Bilddatei (oder direkt ein Bild-Buffer) sowie eine Callback-Funktion, über welche man Zugang zu dem Bildobjekt bekommt. Auf diesem lassen sich dann verschiedene Bildtransformationen und Filter aufrufen, entsprechende Änderungen anschließend mit writeFile() speichern. Ein Skript, das beispielsweise die Größe eines Bildes auf 200 x 200 Pixel ändert, zeigt folgendes Listing:

var lwip = require('lwip');
lwip.open('img/example.png', function (error, image) {
if (error) {
throw error;
}
image.resize(200, 200, function (error, resultImage) {
resultImage.writeFile('img/example-resize.png', function (error) {
if (error) {
throw error;
}
});
});
});

Insgesamt stellt das Modul die wesentlichsten Bildoperationen zur Verfügung, wie man folgender Auflistung entnehmen kann. Dazu zählen beispielsweise wie in obigem Listing gezeigt die Anpassung der Bildgröße, aber auch Skalierung, Rotation, Zuschneiden und Spiegeln. Auch Filter wie ein Scharfzeichner oder der Gaußsche Weichzeichner stehen zur Verfügung.

  • Größenänderung: image.resize(width, height, inter, callback)
  • Skalierung: image.scale(wRatio, hRatio, inter, callback)
  • Rotation: image.rotate(degs, color, callback)
  • Zuschneiden mit Koordination: image.crop(left, top, right, bottom, callback)
  • Zuschneiden von Bildmitte: image.crop(width, height, callback)
  • Gaußscher Weichzeichner: image.blur(sigma, callback)
  • Scharfzeichner: image.sharpen(amplitude, callback)
  • Spiegeln: image.mirror(axes, callback)
  • Sättigung: image.saturate(delta, callback)
  • Helligkeit: image.lighten(delta, callback) und image.darken(delta, callback)
  • Farbton: image.hue(shift, callback)
  • Transparenz: image.fade(delta, callback)

Alternativ zu den oben gezeigten Aufrufen lassen sich die verschiedenen Methoden auch in Form einer Batch-Operation verknüpfen bzw. ausführen. Dazu ruft man wie in folgendem Listing zu sehen einfach die Methode batch() auf und kann anschließend wie von Fluent APIs gewohnt die verschiedenen Methodenaufrufe übersichtlich hintereinander reihen.

require('lwip').open('img/example.png', function (error, image) {
if (error) {
throw error;
}
image.batch()
.scale(0.75) // Skalierung auf 75%
.rotate(45) // Rotation um 45 Grad im Uhrzeigersinn
.crop(50, 50) // Zuschnitt auf 50 x 50 Pixel ausgehend von Bildmitte
.blur(5) // Gaußscher Weichzeichner
.writeFile('img/example-batch.png', function (error) {
});
});

Das Modul LWIP schafft eine leichtgewichtige Alternative zu Bildbearbeitungstools wie ImageMagick und GraphicsMagick beziehungsweise die dafür zur Verfügung stehenden Wrapper-Module. Neben Standardoperationen kann man bei LWIP auf Filter wie Scharfzeichnung oder den Gaußschen Weichzeichner zurückgreifen oder direkt einzelne Pixel bearbeiten. Unterstützt werden übrigens die gängigen Bildformate PNG, GIF und JPEG. ()