
Traitement d’images en R avec magick
Lire, redimensionner, rogner, annoter et combiner des images avec le package magick
Le traitement d’images en R avec le package magick — lire et écrire des images, redimensionner, rogner, pivoter, annoter avec du texte, appliquer des filtres et combiner des images. Une interface ordonnée et compatible pipe pour ImageMagick.
- Lire, inspecter et écrire des images dans n’importe quel format (PNG, JPEG, TIFF, GIF, PDF) avec
image_read()etimage_write(). - Redimensionner, rogner, détourer et pivoter — et la syntaxe geometry en une ligne (
WxH+X+Y) qui les pilote toutes. - Appliquer des filtres (fusain, peinture à l’huile, flou, négatif, modulation) et annoter des images avec du texte.
- Combiner des images — les accoler côte à côte, les superposer avec
image_composite(), et construire un GIF animé. - Chaque opération s’exécute sur les images de démonstration intégrées à magick, vous pouvez donc copier-coller et l’exécuter sans rien télécharger — il vous suffit de
magick.
Besoin de redimensionner un lot de figures, d’ajouter un filigrane à une capture d’écran, ou d’assembler des panneaux en une seule image — sans quitter R pour Photoshop ? Le package magick relie R à ImageMagick, la boîte à outils d’images open source la plus complète qui soit. Il lit des dizaines de formats, ses fonctions sont vectorisées (elles opèrent sur une seule frame ou toute une pile de calques), et elles s’enchaînent proprement en pipe — si bien qu’une édition complète se lit comme une phrase. Ce billet parcourt les opérations les plus courantes, chacune rendue à partir de vrai code exécutable.
Nous utiliserons des images qui sont livrées à l’intérieur d’ImageMagick — le "logo:" intégré (le magicien ImageMagick) et "rose:" — pour que rien ici ne touche le réseau ni un chemin de fichier local.
Lire, inspecter et écrire des images
image_read() est le point d’entrée. Elle accepte un chemin de fichier, une URL ou un vecteur brut de données d’image, et renvoie un objet image magick que RStudio prévisualise automatiquement. Ici, nous lisons le logo du magicien intégré :
library(magick)
img <- image_read("logo:")
img
Pour voir ce que vous tenez, appelez image_info(). Elle renvoie un data frame ordonné — une ligne par frame — avec le format, les dimensions en pixels, l’espace colorimétrique, et si l’image comporte de la transparence :
image_info(img)# A tibble: 1 × 7
format width height colorspace matte filesize density
<chr> <int> <int> <chr> <lgl> <int> <chr>
1 GIF 640 480 sRGB FALSE 28576 72x72
Le logo fait 640 × 480. Lire un vrai fichier fonctionne exactement de la même façon — image_read("photo.jpg") ou image_read("https://…/photo.png").
Écrire une image sur le disque, c’est image_write(). Réglez format pour convertir à l’écriture et quality pour arbitrer entre taille et fidélité :
# Save the logo as a compressed JPEG
image_write(img, path = "wizard.jpg", format = "jpeg", quality = 75)Quand path est un nom de fichier, image_write() renvoie ce chemin, si bien qu’elle s’insère dans un pipe. Pour convertir en mémoire — utile avant une édition avec perte — utilisez image_convert() :
img_png <- image_convert(img, "png")ImageMagick est paresseux au bon sens du terme : juste après une conversion, image_info() peut indiquer une taille de fichier de 0, car rien n’est rendu tant qu’une opération ne le force pas.
Redimensionner, rogner et pivoter
De nombreuses fonctions magick prennent une chaîne geometry de la forme WxH+X+Y, dont chaque partie est optionnelle. Cela vaut la peine de la mémoriser une fois pour toutes :
| Geometry | Signification |
|---|---|
"300" |
Redimensionne proportionnellement à la largeur 300px |
"x300" |
Redimensionne proportionnellement à la hauteur 300px |
"300x200" |
Ajuste dans une boîte 300 × 200 (conserve le rapport d’aspect) |
"300x200!" |
Force exactement 300 × 200 (ignore le rapport d’aspect) |
"100x150+50+20" |
Une région 100 × 150, décalée de +50px à droite, +20px vers le bas |
Redimensionnez avec image_scale() (rapide) ou image_resize() (filtres de meilleure qualité). Passez une largeur, ou une hauteur préfixée par x :
image_scale(img, "300") # width 300px, height auto
Rogner extrait un rectangle avec la syntaxe geometry ; détourer supprime automatiquement les marges de bordure uniformes :
image_crop(img, "300x300+150") # 300x300 region, starting +150px from the left
Pivotez et faites un miroir avec image_rotate(), image_flip() (vertical) et image_flop() (horizontal). Affectez chaque résultat, puis affichez-les côte à côte :
rotated <- image_rotate(img, 45) # 45° clockwise (canvas grows to fit)
flipped <- image_flip(img) # top-to-bottom mirror
flopped <- image_flop(img) # left-to-right mirror
Remarquez comment image_rotate() agrandit le canevas pour que rien ne soit tronqué — les coins se remplissent de la couleur d’arrière-plan.
Appliquer des filtres et des effets
magick enveloppe tout le catalogue d’effets d’ImageMagick. Quelques favoris : image_charcoal() (esquisse), image_negate() (inverse les couleurs), image_oilpaint() (façon peinture), plus image_blur() et image_modulate() (ajuste la luminosité, la saturation et la teinte). Chacune prend une image et en renvoie une :
charcoal <- image_charcoal(img)
negated <- image_negate(img)
oil <- image_oilpaint(img, radius = 3)
Pour ajuster la couleur plutôt que la texture, utilisez image_modulate(img, brightness = 80, saturation = 120, hue = 90) — les valeurs sont des pourcentages, où 100 signifie « inchangé ». image_blur(img, radius = 10, sigma = 5) adoucit ; image_border() et image_background() encadrent et remplissent.
Annoter des images avec du texte
image_annotate() incruste du texte dans une image — idéal pour les filigranes, les étiquettes, ou un rapide tampon « CONFIDENTIAL ». Contrôlez la size, la color, le boxcolor (un surlignage derrière le texte), le placement via gravity ou une location exacte, et la rotation avec degrees :
img |>
image_annotate("CONFIDENTIAL", size = 34, color = "red",
boxcolor = "#ffffffaa", degrees = 30, location = "+40+120") |>
image_annotate("Made with R", size = 26, color = "#3a86d4",
gravity = "southwest", location = "+15+15")
Les polices disponibles sur la plupart des plateformes incluent "sans", "mono", "serif", "Times" et "Helvetica" — passez-en une via l’argument font.
Combiner des images
Parce que magick est vectorisé, un ensemble d’images n’est qu’un vecteur que vous construisez avec c(). image_append() place les frames les unes à côté des autres — de gauche à droite par défaut, ou de haut en bas avec stack = TRUE :
panel <- c(image_read("logo:"), image_read("rose:")) |>
image_scale("x160")
image_append(panel) # side by side; use stack = TRUE to stack vertically
image_composite() superpose une image sur une autre à un offset choisi — la base pour les logos, les badges et l’incrustation d’image :
rose <- image_read("rose:") |> image_scale("120")
image_composite(img, rose, offset = "+60+40")
Pour un unique résultat aplati à partir d’une pile de calques, image_flatten() et image_mosaic() les fusionnent en une seule frame.
Animer : construire un GIF
magick rend l’animation triviale. image_morph() interpole entre les frames, et image_animate() rejoue la pile sous forme de GIF animé — le tout dans R, sans outil externe :
frames <- c(
image_read("logo:") |> image_scale("200x150!"),
image_read("rose:") |> image_scale("200x150!")
)
frames |>
image_morph(frames = 10) |>
image_animate(fps = 10)
Le même image_animate() transforme n’importe quelle pile de frames — disons, une série d’instantanés ggplot2 — en un GIF que vous pouvez glisser directement dans un rapport.
Foire aux questions
magick est un package R qui se lie à ImageMagick, une bibliothèque de traitement d’images open source complète. Il vous permet de lire, éditer, convertir, filtrer, annoter, combiner et animer des images — dans des formats comme PNG, JPEG, TIFF, GIF et PDF — entièrement depuis R, avec une API ordonnée et compatible pipe.
Exécutez install.packages("magick"). Sur macOS et Windows, le binaire embarque ImageMagick, il n’y a donc rien d’autre à installer. Sur Linux, installez d’abord la bibliothèque système (sudo apt-get install -y libmagick++-dev sur Debian/Ubuntu), puis installez le package R.
Utilisez image_read(). Elle accepte un chemin de fichier local, une URL ou un vecteur brut de données d’image — par exemple image_read("photo.png") ou image_read("https://example.com/photo.jpg"). Vérifiez le résultat avec image_info(), qui indique le format, la largeur, la hauteur et l’espace colorimétrique.
Passez une seule dimension à image_scale() (ou image_resize()) : image_scale(img, "300") fixe la largeur à 300px et met la hauteur à l’échelle pour conserver le rapport d’aspect, tandis que "x300" fixe la hauteur. Seul un ! final (comme dans "300x200!") force des dimensions exactes et autorise la déformation.
Oui. Construisez une pile de frames avec c(), interpolez-les éventuellement avec image_morph(), puis rejouez-les avec image_animate(fps = ...). Enregistrez le résultat avec image_write(anim, "out.gif").
Pour aller plus loin dans /learn
magick se marie naturellement avec la création de graphiques : construisez des figures en R, puis annotez-les, rognez-les ou assemblez-les avec magick avant l’export. Pour les tutoriels complets, sous garantie de reproductibilité, commencez par les leçons de graphiques :
- ggplot2 en R — construisez les figures que vous post-traiterez avec magick.
- Visualisation de données — le pilier complet de visualisation.
Voir aussi
- ggplot2 en R — la série sur les graphiques. · Histogramme avec courbe de densité en R — une autre recette pratique. · Visualisation de données.
Demandez à Prova « redimensionner et filigraner un lot d’images en R avec magick » — elle répond avec du code que vous pouvez exécuter sur vos propres fichiers. The runtime is the judge. Demander à Prova →
Citation
@online{kassambara2026,
author = {Kassambara, Alboukadel},
title = {Traitement d’images en R avec magick},
date = {2026-07-08},
url = {https://www.datanovia.com/blog/image-processing-in-r-magick},
langid = {fr}
}