Takes an RGB array/filename and adds an image overlay. Can optionally resize and position the overlay at a specific pixel location.
render_image_overlay(
image,
image_overlay = NULL,
rescale_original = FALSE,
convert_overlay_colorspace = TRUE,
alpha = NA,
overlay_coords = NULL,
overlay_dims = NULL,
overlay_anchor = "nw",
filename = NULL,
preview = FALSE
)3-layer RGB/4-layer RGBA array, rayimg class, or filename of an image.
Default NULL. 3-layer RGB/4-layer RGBA array, rayimg class, or filename of an image.
This image will be resized to the dimension of the image if it does not match exactly.
Default FALSE. If TRUE, function will resize the original image to match
the overlay.
Default TRUE. Whether to convert the overlay's colorspace
to match the underlying image.
Default NA, using overlay's alpha channel. Otherwise, this sets the alpha transparency
by multiplying the existing alpha channel by this value (between 0 and 1).
Default NULL. Pixel coordinate c(x, y) at which to anchor the overlay.
x increases from left to right and y from top to bottom, starting at 1.
Default NULL. Dimensions for the overlay in pixels. If provided, the overlay is
resized with render_resized() before compositing.
Default "nw". Which corner of the overlay is placed at overlay_coords.
Options: "nw", "ne", "sw", "se". The overlay is cropped to the image bounds if necessary.
Default NULL. File to save the image to. If NULL and preview = FALSE,
returns an RGB array.
Default FALSE. If TRUE, it will display the image in addition
to returning it.
A rayimg RGBA array.
if(run_documentation()){
#Plot the dragon
plot_image(dragon)
}
if(run_documentation()){
#Add an overlay of a red semi-transparent circle:
circlemat = generate_2d_disk(min(dim(dragon)[1:2]))
circlemat = circlemat/max(circlemat)
#Create RGBA image, with a transparency of 0.5
rgba_array = array(1, dim=c(nrow(circlemat),ncol(circlemat),4))
rgba_array[,,1] = circlemat
rgba_array[,,2] = 0
rgba_array[,,3] = 0
dragon_clipped = dragon
dragon_clipped[dragon_clipped > 1] = 1
render_image_overlay(dragon_clipped, image_overlay = rgba_array,
alpha=0.5, preview = TRUE)
}
if (run_documentation()) {
# Read photo, convert to ACEScg with CAT (scene)
photo = ray_read_image(sunset_image, normalize = FALSE)
photo_aces = render_convert_colorspace(
photo,
to_mats = CS_ACESCG,
adapt_white = TRUE
)
tmp_txt = tempfile(fileext = ".png")
render_text_image(
"Sunset",
size = 60,
filename = tmp_txt,
color = "#c300ff",
background_alpha = 0
)
# Read logo (display-referred), convert primaries only (no CAT)
logo = ray_read_image(tmp_txt, normalize = FALSE) # sRGB/D65
logo_aces = render_convert_colorspace(
logo,
to_mats = CS_ACESCG,
adapt_white = FALSE
)
# Composite in ACEScg, then display (plot_image converts to sRGB/D65 + OETF)
# Here, we also turn overlay conversion in [render_image_overlay()] off,
# to show what happens when you don't account for the colorspace difference.
# By default [render_image_overlay()] will do this for you.
comp1 = render_image_overlay(
photo_aces,
logo_aces,
convert_overlay_colorspace = FALSE
) |>
render_title(title_text = "#c300ff: Match",
title_color = "white", title_color = "#c300ff", title_bar_alpha=1)
comp2 = render_image_overlay(
photo_aces,
logo,
convert_overlay_colorspace = FALSE
) |>
render_title(title_text = "#c300ff: Incorrect",
title_color = "white", title_color = "#c300ff", title_bar_alpha=1)
plot_image_grid(list(comp1, comp2), dim = c(1, 2))
}
#> Error in render_title(render_image_overlay(photo_aces, logo_aces, convert_overlay_colorspace = FALSE), title_text = "#c300ff: Match", title_color = "white", title_color = "#c300ff", title_bar_alpha = 1): formal argument "title_color" matched by multiple actual arguments