Traitement d’images en R avec magick

Lire, redimensionner, rogner, annoter et combiner des images avec le package magick

Data Visualization

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.

Auteur·rice
Date de publication

8 juillet 2026

Modifié

17 juillet 2026

AstuceCe que vous apprendrez
  • Lire, inspecter et écrire des images dans n’importe quel format (PNG, JPEG, TIFF, GIF, PDF) avec image_read() et image_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.

A three-panel strip of the ImageMagick wizard logo processed with the magick R package: the original, a charcoal-sketch filter, and a version annotated with the word magick.

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

The built-in ImageMagick wizard logo — a cartoon wizard holding a wand — read into R with image_read.

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

The wizard logo resized proportionally to 300 pixels wide.

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

A 300 by 300 pixel square cropped from the wizard logo, offset 150 pixels 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

Three versions of the wizard logo side by side: rotated 45 degrees, flipped vertically, and flopped horizontally.

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)

Three filtered versions of the wizard logo side by side: a charcoal sketch, a colour-inverted negative, and an oil-paint effect.

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")

The wizard logo with a red rotated CONFIDENTIAL watermark and a blue Made with R label pinned to the bottom-left corner.

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

The wizard logo and a red rose placed side by side in a single image.

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")

A red rose overlaid on the top-left area of the larger wizard logo using image_composite.

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)

An animated GIF morphing the ImageMagick wizard logo into a red rose and back.

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 :

Voir aussi

🟢 Avec un agent IA

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 →

Cette page vous a-t-elle été utile ?

Recevez les nouvelles leçons R & Python par e-mail

Pratique, reproductible, sans spam. Désinscription à tout moment.

Double opt-in. Nous ne partageons jamais votre e-mail.

Partager cette pageXLinkedInRedditHN

Citation

BibTeX
@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}
}
Veuillez citer ce travail comme suit :
Kassambara, Alboukadel. 2026. “Traitement d’images en R avec magick.” July 8. https://www.datanovia.com/blog/image-processing-in-r-magick.