Basic transformations like rotate, resize, crop and flip. The geometry syntax is used to specify sizes and areas.
Usage
image_trim(image, fuzz = 0)
image_chop(image, geometry)
image_rotate(image, degrees)
image_resize(image, geometry = NULL, filter = NULL)
image_scale(image, geometry = NULL)
image_sample(image, geometry = NULL)
image_crop(image, geometry = NULL, gravity = NULL, repage = TRUE)
image_extent(image, geometry, gravity = "center", color = "none")
image_flip(image)
image_flop(image)
image_deskew(image, threshold = 40)
image_deskew_angle(image, threshold = 40)
image_page(image, pagesize = NULL, density = NULL)
image_repage(image)
image_orient(image, orientation = NULL)
image_shear(image, geometry = "10x10", color = "none")
image_distort(image, distortion = "perspective", coordinates, bestfit = FALSE)Arguments
- image
 magick image object returned by
image_read()orimage_graph()- fuzz
 relative color distance (value between 0 and 100) to be considered similar in the filling algorithm
- geometry
 a geometry string specifying area (for cropping) or size (for resizing).
- degrees
 value between 0 and 360 for how many degrees to rotate
- filter
 string with filter type from: filter_types
- gravity
 string with gravity value from gravity_types.
- repage
 resize the canvas to the cropped area
- color
 a valid color string such as
"navyblue"or"#000080". Use"none"for transparency.- threshold
 straightens an image. A threshold of 40 works for most images.
- pagesize
 geometry string with preferred size and location of an image canvas
- density
 geometry string with vertical and horizontal resolution in pixels of the image. Specifies an image density when decoding a Postscript or PDF.
- orientation
 string to set image orientation one of the orientation_types. If
NULLit applies auto-orientation which tries to infer the correct orientation from the Exif data.- distortion
 string to set image orientation one of the distort_types.
- coordinates
 numeric vector (typically of length 12) with distortion coordinates
- bestfit
 if set to
TRUEthe size of the output image can be different from input
Details
For details see Magick++ STL documentation. Short descriptions:
image_trim removes edges that are the background color from the image.
image_chop removes vertical or horizontal subregion of image.
image_crop cuts out a subregion of original image
image_rotate rotates and increases size of canvas to fit rotated image.
image_deskew auto rotate to correct skewed images
image_resize resizes using custom filterType
image_scale and image_sample resize using simple ratio and pixel sampling algorithm.
image_flip and image_flop invert image vertically and horizontally
The most powerful resize function is image_resize which allows for setting
a custom resize filter. Output of image_scale is similar to image_resize(img, filter = "point").
For resize operations it holds that if no geometry is specified, all frames
are rescaled to match the top frame.
Examples
logo <- image_read("logo:")
logo <- image_scale(logo, "400")
image_trim(logo)
#> # A tibble: 1 × 7
#>   format width height colorspace matte filesize density
#>   <chr>  <int>  <int> <chr>      <lgl>    <int> <chr>  
#> 1 GIF      287    296 sRGB       FALSE        0 72x72  
image_chop(logo, "100x20")
#> # A tibble: 1 × 7
#>   format width height colorspace matte filesize density
#>   <chr>  <int>  <int> <chr>      <lgl>    <int> <chr>  
#> 1 GIF      300    280 sRGB       FALSE        0 72x72  
image_rotate(logo, 45)
#> # A tibble: 1 × 7
#>   format width height colorspace matte filesize density
#>   <chr>  <int>  <int> <chr>      <lgl>    <int> <chr>  
#> 1 GIF      496    496 sRGB       FALSE        0 72x72  
# Small image
rose <- image_convert(image_read("rose:"), "png")
# Resize to 400 width or height:
image_resize(rose, "400x")
#> # A tibble: 1 × 7
#>   format width height colorspace matte filesize density
#>   <chr>  <int>  <int> <chr>      <lgl>    <int> <chr>  
#> 1 PNG      400    263 sRGB       FALSE        0 72x72  
image_resize(rose, "x400")
#> # A tibble: 1 × 7
#>   format width height colorspace matte filesize density
#>   <chr>  <int>  <int> <chr>      <lgl>    <int> <chr>  
#> 1 PNG      609    400 sRGB       FALSE        0 72x72  
# Resize keeping ratio
image_resize(rose, "400x400")
#> # A tibble: 1 × 7
#>   format width height colorspace matte filesize density
#>   <chr>  <int>  <int> <chr>      <lgl>    <int> <chr>  
#> 1 PNG      400    263 sRGB       FALSE        0 72x72  
# Resize, force size losing ratio
image_resize(rose, "400x400!")
#> # A tibble: 1 × 7
#>   format width height colorspace matte filesize density
#>   <chr>  <int>  <int> <chr>      <lgl>    <int> <chr>  
#> 1 PNG      400    400 sRGB       FALSE        0 72x72  
# Different filters
image_resize(rose, "400x", filter = "Triangle")
#> # A tibble: 1 × 7
#>   format width height colorspace matte filesize density
#>   <chr>  <int>  <int> <chr>      <lgl>    <int> <chr>  
#> 1 PNG      400    263 sRGB       FALSE        0 72x72  
image_resize(rose, "400x", filter = "Point")
#> # A tibble: 1 × 7
#>   format width height colorspace matte filesize density
#>   <chr>  <int>  <int> <chr>      <lgl>    <int> <chr>  
#> 1 PNG      400    263 sRGB       FALSE        0 72x72  
# simple pixel resize
image_scale(rose, "400x")
#> # A tibble: 1 × 7
#>   format width height colorspace matte filesize density
#>   <chr>  <int>  <int> <chr>      <lgl>    <int> <chr>  
#> 1 PNG      400    263 sRGB       FALSE        0 72x72  
image_sample(rose, "400x")
#> # A tibble: 1 × 7
#>   format width height colorspace matte filesize density
#>   <chr>  <int>  <int> <chr>      <lgl>    <int> <chr>  
#> 1 PNG      400    263 sRGB       FALSE        0 72x72  
image_crop(logo, "400x400+200+200")
#> # A tibble: 1 × 7
#>   format width height colorspace matte filesize density
#>   <chr>  <int>  <int> <chr>      <lgl>    <int> <chr>  
#> 1 GIF      200    100 sRGB       FALSE        0 72x72  
image_extent(rose, '200x200', color = 'pink')
#> # A tibble: 1 × 7
#>   format width height colorspace matte filesize density
#>   <chr>  <int>  <int> <chr>      <lgl>    <int> <chr>  
#> 1 PNG      200    200 sRGB       FALSE        0 72x72  
image_flip(logo)
#> # A tibble: 1 × 7
#>   format width height colorspace matte filesize density
#>   <chr>  <int>  <int> <chr>      <lgl>    <int> <chr>  
#> 1 GIF      400    300 sRGB       FALSE        0 72x72  
image_flop(logo)
#> # A tibble: 1 × 7
#>   format width height colorspace matte filesize density
#>   <chr>  <int>  <int> <chr>      <lgl>    <int> <chr>  
#> 1 GIF      400    300 sRGB       FALSE        0 72x72  
skewed <- image_rotate(logo, 5)
deskewed <- image_deskew(skewed)
attr(deskewed, 'angle')
#> [1] -4.80068
if(magick_config()$version > "6.8.6")
  image_orient(logo)
#> # A tibble: 1 × 7
#>   format width height colorspace matte filesize density
#>   <chr>  <int>  <int> <chr>      <lgl>    <int> <chr>  
#> 1 GIF      400    300 sRGB       FALSE        0 72x72  
image_shear(logo, "10x10")
#> # A tibble: 1 × 7
#>   format width height colorspace matte filesize density
#>   <chr>  <int>  <int> <chr>      <lgl>    <int> <chr>  
#> 1 GIF      453    361 sRGB       FALSE        0 72x72  
building <- demo_image('building.jpg')
image_distort(building, 'perspective', c(7,40,4,30,4,124,4,123,85,122,100,123,85,2,100,30))
#> # A tibble: 1 × 7
#>   format width height colorspace matte filesize density
#>   <chr>  <int>  <int> <chr>      <lgl>    <int> <chr>  
#> 1 JPEG     146    150 sRGB       FALSE        0 72x72  
