Traitement d'images dans Node.js : la bibliothèque Sharp

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Bibliothèque Sharp pour le traitement d'images dans Node.js



Dans le développement web moderne, le traitement d'images côté serveur est une tâche cruciale. Node.js, grâce à son architecture événementielle, excelle dans cette tâche. Parmi les nombreuses bibliothèques de traitement d'images, Sharp occupe une place particulière — un module open source haute performance écrit en C++ utilisant la bibliothèque libvips.



Qu'est-ce que Sharp ?



Sharp est un module Node.js pour le traitement rapide d'images. Il prend en charge les formats JPEG, PNG, WebP, AVIF, TIFF et GIF. Les fonctionnalités principales incluent le redimensionnement, le recadrage, la rotation, la correction des couleurs, l'ajout de filigranes et la conversion entre formats. Grâce à l'utilisation de libvips, Sharp est 4 à 5 fois plus rapide que les bibliothèques similaires (comme ImageMagick ou GraphicsMagick).



Installation



L'installation se fait via npm. Assurez-vous que les compilateurs C++ (gcc ou clang) et libvips sont installés sur le système (sur certains systèmes d'exploitation, une installation préalable est requise).



npm install sharp


Après l'installation, vous pouvez importer le module dans votre projet :



const sharp = require('sharp');


Opérations principales avec les images



1. Redimensionnement (resize)



La tâche la plus courante est de réduire ou d'agrandir une image. Sharp permet de définir la largeur, la hauteur ou les deux dimensions simultanément. Si un seul paramètre est spécifié, le second sera calculé proportionnellement.



const sharp = require('sharp');

async function resizeImage() { try { await sharp('input.jpg') .resize(300, 200) // largeur 300px, hauteur 200px .toFile('output-resized.jpg'); console.log('Image redimensionnée'); } catch (error) { console.error('Erreur :', error); }}

resizeImage();


Pour conserver les proportions, utilisez fit :



const sharp = require('sharp');

async function resizeWithFit() { await sharp('input.jpg') .resize({ width: 300, height: 200, fit: 'inside' // 'cover', 'contain', 'fill', 'inside', 'outside' }) .toFile('output-fit.jpg');}

resizeWithFit();


2. Recadrage (crop)



Le recadrage permet de supprimer les parties inutiles d'une image. Sharp prend en charge le recadrage par coordonnées spécifiées ou par stratégie (par exemple, recadrage central).



const sharp = require('sharp');

async function cropImage() { await sharp('input.jpg') .extract({ left: 100, top: 50, width: 400, height: 300 }) .toFile('output-cropped.jpg');}

cropImage();


Vous pouvez également utiliser resize avec l'option crop :



const sharp = require('sharp');

async function cropWithResize() { await sharp('input.jpg') .resize(200, 200, { fit: 'cover', position: 'centre' }) .toFile('output-cover.jpg');}

cropWithResize();


3. Conversion de formats



Sharp permet de convertir facilement des images d'un format à un autre. Il suffit de spécifier l'extension dans le fichier de sortie ou d'utiliser la méthode .toFormat().



const sharp = require('sharp');

async function convertToWebP() { await sharp('input.png') .toFormat('webp') .toFile('output.webp');}

async function convertToJpeg() { await sharp('input.webp') .jpeg({ quality: 80 }) .toFile('output.jpg');}

convertToWebP();convertToJpeg();


4. Gestion des métadonnées



Vous pouvez extraire les métadonnées d'une image : dimensions, espace colorimétrique, DPI, données EXIF, etc.



const sharp = require('sharp');

async function getMetadata() { const metadata = await sharp('input.jpg').metadata(); console.log('Métadonnées :', metadata); // { format:

Recommendations