Crop an image into a circle with a transparent background.
The purpose of this package is to provide a simple and straight
forward way to circle crop an image, with a transparent background and
plot it with ggimage
, ggpath
, or include in
tables using e.g. gt
, reactable
, etc. There
are a few ways to do this, but this package intends to make it as
simplified as possible.
Version 0.2.4 has changed the function naming convention to
crop_*
. circle_crop
and hex_crop
are still available and work the same way so won’t break existing code
but will be deprecated at some stage.
From CRAN
install.packages("cropcircles")
Or Git
::install_github("doehm/cropcircles") devtools
The main function crop_circle
takes a vector of image
paths, either local or URL links, crops the image and returns the path.
The path of the cropped images can be provided or if left blank it will
save them to a temp location which is cleared when the session ends.
A border can be added by specifying the size (in pixels) and colour.
library(cropcircles)
library(magick)
## Linking to ImageMagick 6.9.12.93
## Enabled features: cairo, freetype, fftw, ghostscript, heic, lcms, pango, raw, rsvg, webp
## Disabled features: fontconfig, x11
<- file.path(system.file(package = "cropcircles"), "images", "walter-jesse.png")
img_path
# saves to a temporary path
<- crop_circle(img_path, border_size = 4)
img_cropped
# plot image with magic
# can be used with ggimage or ggpath
image_read(img_cropped)
# other geometries
image_read(crop_hex(img_path, border_size = 4))
image_read(crop_heart(img_path, border_size = 4))
image_read(crop_parallelogram(img_path, border_size = 4))
The function can take an image with any dimensions. It will circle crop the image from the center with a diameter of the smallest dimension.
With rectangular images the subject for focus may not be centered.
The crop_*
functions include a just
argument
which can take values left
, right
,
top
and bottom
. It simply shifts the initial
cropping window to the desired side.
library(magick)
# justification example
<- file.path(system.file(package = "cropcircles"), "images", "walter-jesse.png")
img_path <- image_read(img_path)
orig
# center (default)
<- image_read(crop_circle(img_path, border_size = 4))
center
# left
<- image_read(crop_circle(img_path, border_size = 4, just = "left"))
left
# right
<- image_read(crop_circle(img_path, border_size = 4, just = "right"))
right
image_montage(c(orig, center, left, right))