Skip to content

API de traitement d'image

Sharp fournit des fonctionnalités riches de traitement d'image, incluant le redimensionnement, le recadrage, la rotation, les filtres et d'autres opérations.

Redimensionnement (resize)

Utilisation de base

javascript
import sharp from 'sharp';

// Redimensionner aux dimensions spécifiées
sharp('input.jpg')
  .resize(300, 200)
  .toFile('output.jpg');

// Spécifier uniquement la largeur, la hauteur est calculée automatiquement
sharp('input.jpg')
  .resize(300)
  .toFile('output.jpg');

// Spécifier uniquement la hauteur, la largeur est calculée automatiquement
sharp('input.jpg')
  .resize(null, 200)
  .toFile('output.jpg');

Options de redimensionnement

javascript
sharp('input.jpg')
  .resize(300, 200, {
    // Algorithme de redimensionnement
    kernel: sharp.kernel.lanczos3,
    
    // Position
    position: 'center',
    
    // Couleur de fond
    background: { r: 255, g: 255, b: 255, alpha: 1 },
    
    // Conserver le ratio d'aspect
    fit: 'cover',
    
    // Ne pas agrandir
    withoutEnlargement: true,
    
    // Ne pas réduire
    withoutReduction: false
  })
  .toFile('output.jpg');

Algorithmes de redimensionnement

javascript
// Algorithmes de redimensionnement disponibles
sharp.kernel.nearest      // Plus proche voisin
sharp.kernel.cubic        // Interpolation cubique
sharp.kernel.mitchell     // Mitchell-Netravali
sharp.kernel.lanczos2     // Lanczos 2-lobed
sharp.kernel.lanczos3     // Lanczos 3-lobed (par défaut)

Modes d'adaptation

javascript
// cover: Conserver le ratio d'aspect, recadrer les parties dépassantes
sharp('input.jpg').resize(300, 200, { fit: 'cover' })

// contain: Conserver le ratio d'aspect, ajouter un fond
sharp('input.jpg').resize(300, 200, { fit: 'contain' })

// fill: Étirer aux dimensions spécifiées
sharp('input.jpg').resize(300, 200, { fit: 'fill' })

// inside: Conserver le ratio d'aspect, ne pas dépasser les dimensions originales
sharp('input.jpg').resize(300, 200, { fit: 'inside' })

// outside: Conserver le ratio d'aspect, atteindre au moins les dimensions spécifiées
sharp('input.jpg').resize(300, 200, { fit: 'outside' })

Recadrage (extract)

javascript
// Recadrer une zone spécifiée
sharp('input.jpg')
  .extract({ left: 100, top: 100, width: 300, height: 200 })
  .toFile('output.jpg');

// Recadrer et redimensionner
sharp('input.jpg')
  .extract({ left: 100, top: 100, width: 300, height: 200 })
  .resize(150, 100)
  .toFile('output.jpg');

Rotation (rotate)

javascript
// Rotation de 90 degrés
sharp('input.jpg')
  .rotate(90)
  .toFile('output.jpg');

// Rotation avec couleur de fond spécifiée
sharp('input.jpg')
  .rotate(45, { background: { r: 255, g: 255, b: 255, alpha: 1 } })
  .toFile('output.jpg');

Retournement (flip/flop)

javascript
// Retournement vertical
sharp('input.jpg')
  .flip()
  .toFile('output.jpg');

// Retournement horizontal
sharp('input.jpg')
  .flop()
  .toFile('output.jpg');

Flou (blur)

javascript
// Flou gaussien
sharp('input.jpg')
  .blur(5)
  .toFile('output.jpg');

// Netteté
sharp('input.jpg')
  .sharpen()
  .toFile('output.jpg');

// Paramètres de netteté personnalisés
sharp('input.jpg')
  .sharpen({
    sigma: 1,
    flat: 1,
    jagged: 2
  })
  .toFile('output.jpg');

Filtres

Niveaux de gris

javascript
sharp('input.jpg')
  .grayscale()
  .toFile('output.jpg');

Inversion

javascript
sharp('input.jpg')
  .negate()
  .toFile('output.jpg');

Correction gamma

javascript
sharp('input.jpg')
  .gamma(2.2)
  .toFile('output.jpg');

Luminosité/Contraste

javascript
sharp('input.jpg')
  .modulate({
    brightness: 1.2,    // Luminosité (0.1-2.0)
    saturation: 0.8,    // Saturation (0-2.0)
    hue: 180            // Teinte (0-360)
  })
  .toFile('output.jpg');

Opérations de couleur

Teinte

javascript
sharp('input.jpg')
  .tint({ r: 255, g: 0, b: 0 })
  .toFile('output.jpg');

Matrice de couleur

javascript
sharp('input.jpg')
  .recomb([
    [0.3588, 0.7044, 0.1368],
    [0.2990, 0.5870, 0.1140],
    [0.0000, 0.0000, 1.0000]
  ])
  .toFile('output.jpg');

Opérations de canaux

Séparation de canaux

javascript
// Obtenir le canal rouge
sharp('input.jpg')
  .extractChannel('red')
  .toFile('red-channel.jpg');

// Obtenir tous les canaux
const channels = await sharp('input.jpg').separate();

Fusion de canaux

javascript
// Fusionner depuis des fichiers de canaux séparés
sharp('red.jpg')
  .joinChannel(['green.jpg', 'blue.jpg'])
  .toFile('merged.jpg');

Opérations combinées

javascript
// Opérations en chaîne
sharp('input.jpg')
  .resize(800, 600)
  .rotate(90)
  .blur(2)
  .sharpen()
  .jpeg({ quality: 80 })
  .toFile('output.jpg');

Optimisation des performances

Traitement en flux

javascript
const fs = require('fs');

fs.createReadStream('input.jpg')
  .pipe(sharp().resize(300, 200))
  .pipe(fs.createWriteStream('output.jpg'));

Traitement par lot

javascript
const sharp = require('sharp');
const fs = require('fs').promises;

async function processImages() {
  const files = await fs.readdir('./images');
  
  const promises = files
    .filter(file => file.endsWith('.jpg'))
    .map(async file => {
      await sharp(`./images/${file}`)
        .resize(300, 200)
        .jpeg({ quality: 80 })
        .toFile(`./output/${file}`);
    });
    
  await Promise.all(promises);
}

Gestion des erreurs

javascript
try {
  await sharp('input.jpg')
    .resize(300, 200)
    .toFile('output.jpg');
} catch (error) {
  console.error('Échec du traitement d'image:', error.message);
}

Liens connexes

Distribué sous licence Apache 2.0.