How to crop an image to a circle in R with {cropcircles}
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
I hadn’t found a super-easy-you-don’t-have-to-think-about-it way to crop an image to a circle in R with a transparent background. There’s this stack overflow but I wouldn’t call it straightforward. So, I wrote this small package to do what I wanted.
In a nutshell, you pass a vector of image paths, which can be either local or from a URL link to circle_crop, and it will
- Download the images if required
- Crop the image to a circle with a transparent background,
- Return the path where the cropped images are saved
circle_crop can save the images to a specific location for use later, or if no location is given it will save them to a temporary location which is cleared when the session ends. All of this can happen in a single mutate step, so yeah, you don’t have to think about it. The cropped images can then be plotted with ggimage, ggpath, etc, or included in tables using e.g. gt, reactable, etc.
Installation
Firstly, install from Git.
devtools::install_github("doehm/cropcircles")
Example
Here’s a quick example. This demonstrates how circle_crop will …
- Download the images from Open Psychometrics
- Circle crop the images and
- Make them available to plot on a chart
All in a few lines.
library(cropcircles)
library(dplyr)
library(ggimage)
images <- c(
"https://openpsychometrics.org/tests/characters/test-resources/pics/BB/1.jpg",
"https://openpsychometrics.org/tests/characters/test-resources/pics/BB/3.jpg",
"https://openpsychometrics.org/tests/characters/test-resources/pics/BB/9.jpg",
"https://openpsychometrics.org/tests/characters/test-resources/pics/BB/8.jpg")
df <- tibble(y = 1:4, images = images) |>
mutate(images_cropped = circle_crop(images)) # where the magic happens
df |>
ggplot() +
geom_image(aes(1.5, y, image = images), size = 0.15) +
geom_image(aes(3.5, y, image = images_cropped), size = 0.15) +
xlim(0, 5) +
ylim(0, 5) +
coord_fixed()

The circle_crop function can take an image with any dimensions. It will circle crop the image from the center with a diameter of the smallest dimension.
The post How to crop an image to a circle in R with {cropcircles} appeared first on Dan Oehm | Gradient Descending.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.