Arbeiten mit Bildern in Node.js: resize und crop mit Sharp
\n\nIn der modernen Webentwicklung ist die serverseitige Bildverarbeitung eine häufige Aufgabe. Node.js bietet mehrere leistungsstarke Bibliotheken für die Arbeit mit Grafiken. In diesem Artikel betrachten wir die Bibliothek Sharp im Detail – ein schnelles und effizientes Werkzeug zur Größenänderung (resize) und zum Zuschneiden (crop) von Bildern.
\n\nWarum Sharp?
\n\nSharp verwendet die nativen libvips-Bibliotheken, was es zu einer der leistungsfähigsten Lösungen für Node.js macht. Die Hauptvorteile sind:
\n- \n
- Hohe Verarbeitungsgeschwindigkeit (deutlich schneller als reine JavaScript-Alternativen) \n
- Geringer Speicherverbrauch \n
- Unterstützung aller gängigen Formate: JPEG, PNG, WebP, AVIF, TIFF \n
- Einfache und verständliche API
- Möglichkeit der Arbeit mit Streams
Installation
\n\nDie Installation von Sharp in einem Node.js-Projekt erfolgt mit einem Befehl:
\n\nnpm install sharp\n\nNach der Installation ist die Bibliothek einsatzbereit. Stellen Sie sicher, dass die erforderlichen Abhängigkeiten für die Kompilierung des nativen Moduls auf Ihrem System installiert sind (dies geschieht normalerweise automatisch).
\n\nGrundlegende Größenänderung (resize)
\n\nDie Methode resize() ermöglicht die Änderung der Bildabmessungen. Betrachten wir die wichtigsten Verwendungsmöglichkeiten.
Beispiel 1: Einfache Größenänderung
\n\nconst sharp = require('sharp');\nconst path = require('path');\n\nasync function resizeImage() {\n try {\n await sharp('input.jpg')\n .resize(300, 200) // Breite 300px, Höhe 200px\n .toFile('output.jpg');\n console.log('Bild erfolgreich geändert');\n } catch (error) {\n console.error('Fehler:', error);\n }\n}\n\nresizeImage();\n\nIn diesem Beispiel wird das Bild auf die genauen Abmessungen 300x200 Pixel skaliert, was die Proportionen verzerren kann.
\n\nBeispiel 2: Proportionen beibehalten
\n\nasync function resizeWithProportions() {\n await sharp('input.jpg')\n .resize({\n width: 400, // nur Breite\n height: undefined, // Höhe wird automatisch berechnet\n fit: 'inside' // Proportionen beibehalten\n })\n .toFile('output_inside.jpg');\n \n console.log('Proportionen beibehalten');\n}\n\nDer Parameter fit akzeptiert mehrere Werte:
- \n
cover– schneidet das Bild zu, um die angegebenen Abmessungen vollständig auszufüllen (Standard) \n contain– passt das Bild in die angegebenen Abmessungen ein, unter Beibehaltung der Proportionen \n fill– streckt das Bild auf die angegebenen Abmessungen \n inside– verkleinert das Bild, sodass es in die angegebenen Abmessungen passt \n outside– vergrößert das Bild, sodass es über die angegebenen Abmessungen hinausragt \n
Bilder zuschneiden (crop)
\n\nSharp bietet zwei Hauptmethoden zum Zuschneiden: mit der Methode extract() und über die Parameter von resize().
Die Methode extract()
\n\nErmöglicht das Ausschneiden eines rechteckigen Bereichs aus dem Bild anhand angegebener Koordinaten:
\n\nasync function cropImage() {\n await sharp('input.jpg')\n .extract({\n left: 100, // Abstand von links\n top: 50, // Abstand von oben\n width: 300, // Breite des Bereichs\n height: 200 // Höhe des Bereichs\n })\n .toFile('cropped.jpg');\n \n console.log('Zuschnitt ausgeführt');\n}\n\nAutomatischer Zuschnitt bei resize
\n\nHäufig ist es erforderlich, die Größe zu ändern und gleichzeitig das Bild zuzuschneiden. Dies erfolgt mit dem Parameter gravity oder position:
async function cropAndResize() {\n await sharp('input.jpg')\n .resize(200, 200, {\n fit: 'cover', // auf genaue Auch in der Bibliothek
Arbeit mit YAML in TypeScript: Parsen, Generieren und Validieren von Daten
Kingfisher für Swift: Vollständiger Leitfaden mit Beispielen
Arbeit mit XML in Rust: Bibliotheken roxmltree, quick-xml und serde-xml-rs
Arbeiten mit Daten in Kotlin: Überblick über Bibliotheken und Werkzeuge
GraphQL-Bibliothek für C++: API-Implementierung mit graphql-cpp