Title: | Create Easily Canvas in 'shiny' and 'RMarkdown' Documents |
---|---|
Description: | Allows the user to implement easily canvas elements within a 'shiny' app or an 'RMarkdown' document. The user can create shapes, images and text elements within the canvas which can also be used as a drawing tool for taking notes. The package relies on the 'fabricjs' 'JavaScript' library. See <http://fabricjs.com/>. |
Authors: | Mohamed El Fodil Ihaddaden [aut, cre], Garrick Aden-Buie [ctb], fabricjs contributors [ctb, cph] (fabricjs JavaScript library), jQuery contributors [ctb, cph] (jQuery JavaScript library), FileSaver.js contributors [ctb, cph] (FileSaver JavaScript library) |
Maintainer: | Mohamed El Fodil Ihaddaden <[email protected]> |
License: | AGPL (>= 3) |
Version: | 0.1.2 |
Built: | 2024-11-03 02:48:26 UTC |
Source: | https://github.com/feddelegrand7/fabricerin |
Add a background or an overlay image to a preexisting canvas
fabric_curtail(cid, imgsrc, type = "background")
fabric_curtail(cid, imgsrc, type = "background")
cid |
the id of the canvas element |
imgsrc |
the URL source of the image |
type |
whether to use an image as a 'background' or as an 'overlay' |
a canvas with a background or overlay image
if (interactive()) { img <- "https://st.depositphotos.com/1642482/1904/i/950/depositphotos_19049237-stock-photo-leaf.jpg" ui <- fluidPage( fabric_shape(cid = "canvas123", shapeId = "tri1", shape = "Triangle", fill = "darkblue"), fabric_curtail(cid = "canvas123", imgsrc = img, type = "background" ) ) server <- function(input, output) {} shinyApp(ui = ui, server = server) }
if (interactive()) { img <- "https://st.depositphotos.com/1642482/1904/i/950/depositphotos_19049237-stock-photo-leaf.jpg" ui <- fluidPage( fabric_shape(cid = "canvas123", shapeId = "tri1", shape = "Triangle", fill = "darkblue"), fabric_curtail(cid = "canvas123", imgsrc = img, type = "background" ) ) server <- function(input, output) {} shinyApp(ui = ui, server = server) }
Create a canvas element for drawing
fabric_drawing( cid, cwidth = 800, cheight = 600, cfill = "#FFFFFF", drawingWidth = 2, gumSize = 10 )
fabric_drawing( cid, cwidth = 800, cheight = 600, cfill = "#FFFFFF", drawingWidth = 2, gumSize = 10 )
cid |
the id of the canvas element |
cwidth |
the width of the canvas element |
cheight |
the height of the canvas element |
cfill |
the color of the canvas element. Default to #FFFFFF (white) |
drawingWidth |
the width of the drawing output. Default to 2 |
gumSize |
specify the size of the gum. Defaults to 10 |
an HTML canvas element
if (interactive()) { ui <- fluidPage( h1("Draw some stuff here"), fabric_drawing(cid = "canvas1") ) server <- function(input, output) {} shinyApp(ui = ui, server = server) }
if (interactive()) { ui <- fluidPage( h1("Draw some stuff here"), fabric_drawing(cid = "canvas1") ) server <- function(input, output) {} shinyApp(ui = ui, server = server) }
Insert external images inside canvas element
fabric_image( cid, cwidth = 800, cheight = 600, cfill = "#FFFFFF", imgId, imgsrc, imgwidth = 500, imgheight = 500, left = 100, top = 100, angle = 0, opacity = 1, strokecolor = "darkblue", strokewidth = 1, selectable = TRUE, isDrawingMode = FALSE )
fabric_image( cid, cwidth = 800, cheight = 600, cfill = "#FFFFFF", imgId, imgsrc, imgwidth = 500, imgheight = 500, left = 100, top = 100, angle = 0, opacity = 1, strokecolor = "darkblue", strokewidth = 1, selectable = TRUE, isDrawingMode = FALSE )
cid |
the id of the canvas element |
cwidth |
the width of the canvas element. Defaults to 800 |
cheight |
the height of the canvas element. Defaults to 600 |
cfill |
the color of the canvas element |
imgId |
the id of the image |
imgsrc |
the URL source of the image |
imgwidth |
the width of the image. Defaults to 500 |
imgheight |
the height of the image. Defaults to 500 |
left |
the image's position from the left relative to the canvas element. Defaults to 100 |
top |
the image's position from the top relative to the canvas element. Defaults to 100 |
angle |
the angle of rotation of the image. Defaults to 0 (no rotation) |
opacity |
the opacity of the image (from 0 to 1). Defaults to 1 |
strokecolor |
the stroke color of the image. Defaults to 'darkblue' |
strokewidth |
the stroke width of the image. Defaults to 1 |
selectable |
logical. If TRUE, the user can modify interactively the image's size, position and rotation. Defaults to TRUE |
isDrawingMode |
logical. If TRUE, the user can draw inside the canvas element. |
an image inside a canvas element
if (interactive()) { img <- "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/R_logo.svg/724px-R_logo.svg.png" ui <- fluidPage( fabric_image(cid = "cimage", cfill = "lightblue", imgId = "Rimg", imgsrc = img) ) server <- function(input, output) {} shinyApp(ui = ui, server = server) }
if (interactive()) { img <- "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/R_logo.svg/724px-R_logo.svg.png" ui <- fluidPage( fabric_image(cid = "cimage", cfill = "lightblue", imgId = "Rimg", imgsrc = img) ) server <- function(input, output) {} shinyApp(ui = ui, server = server) }
Add an image to a preexisting canvas element
fabric_image_add( cid, imgId, imgsrc, imgwidth = 500, imgheight = 500, left = 100, top = 100, angle = 0, opacity = 1, strokecolor = "darkblue", strokewidth = 1, selectable = TRUE )
fabric_image_add( cid, imgId, imgsrc, imgwidth = 500, imgheight = 500, left = 100, top = 100, angle = 0, opacity = 1, strokecolor = "darkblue", strokewidth = 1, selectable = TRUE )
cid |
the id of the canvas element you want to add your image to |
imgId |
the of the image |
imgsrc |
the URL source of the image |
imgwidth |
the width of the image. Defaults to 500 |
imgheight |
the height of the image. Defaults to 500 |
left |
the image's position from the left relative to the canvas element. Defaults to 100 |
top |
the image's position from the top relative to the canvas element. Defaults to 100 |
angle |
the angle of rotation of the image. Defaults to 0 (no rotation) |
opacity |
the opacity of the image (from 0 to 1). Defaults to 1 |
strokecolor |
the stroke color of the image. Defaults to 'darkblue' |
strokewidth |
the stroke width of the image. Defaults to 1 |
selectable |
logical. If TRUE, the user can modify interactively the image's size, position and rotation. Defaults to TRUE |
an image inside a preexisting canvas element
if (interactive()) { img1 <- "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/R_logo.svg/724px-R_logo.svg.png" img2 <- "https://raw.githubusercontent.com/rstudio/hex-stickers/master/PNG/dplyr.png" ui <- fluidPage( fabric_image(cid = "cimage", imgId = "Rimg", imgsrc = img1, imgheight = 200, imgwidth = 200), fabric_image_add(cid = "cimage", imgId = "rstudioimg", imgsrc = img2, imgwidth = 200, imgheight = 200, left = 400) ) server <- function(input, output) {} shinyApp(ui = ui, server = server) }
if (interactive()) { img1 <- "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/R_logo.svg/724px-R_logo.svg.png" img2 <- "https://raw.githubusercontent.com/rstudio/hex-stickers/master/PNG/dplyr.png" ui <- fluidPage( fabric_image(cid = "cimage", imgId = "Rimg", imgsrc = img1, imgheight = 200, imgwidth = 200), fabric_image_add(cid = "cimage", imgId = "rstudioimg", imgsrc = img2, imgwidth = 200, imgheight = 200, left = 400) ) server <- function(input, output) {} shinyApp(ui = ui, server = server) }
Create shapes inside a canvas
fabric_shape( cid, cwidth = 800, cheight = 600, cfill = "#FFFFFF", shapeId, shape = "Rect", left = 100, top = 100, fill = "red", width = 200, height = 200, angle = 0, opacity = 1, strokecolor = "darkblue", strokewidth = 5, selectable = TRUE, isDrawingMode = FALSE, radius = NULL, xPolygon = NULL, yPolygon = NULL )
fabric_shape( cid, cwidth = 800, cheight = 600, cfill = "#FFFFFF", shapeId, shape = "Rect", left = 100, top = 100, fill = "red", width = 200, height = 200, angle = 0, opacity = 1, strokecolor = "darkblue", strokewidth = 5, selectable = TRUE, isDrawingMode = FALSE, radius = NULL, xPolygon = NULL, yPolygon = NULL )
cid |
the id of the canvas element |
cwidth |
the width of the canvas element. Defaults to 800 |
cheight |
the height of the canvas element. Defaults to 600 |
cfill |
the color of the canvas element |
shapeId |
the id of the shape object |
shape |
the shape of the object. Choices include 'Circle', 'Triangle' and 'Rect'. Defaults to 'Rect' |
left |
the shape's position from the left relative to the canvas element. Defaults to 100 |
top |
the shape's position from the top relative to the canvas element. Defaults to 100 |
fill |
the color of the shape. Defaults to 'red' |
width |
the width of the shape. Defaults to 200 |
height |
the height of the shape. Defaults to 200 |
angle |
the angle of rotation of the shape. Defaults to 0 (no rotation) |
opacity |
the opacity of the shape (from 0 to 1). Defaults to 1 |
strokecolor |
the stroke color of the shape. Defaults to 'darkblue' |
strokewidth |
the stroke width of the shape. Defaults to 5. |
selectable |
logical. If TRUE, the user can modify interactively the shape's size, position and rotation. Defaults to TRUE |
isDrawingMode |
logical. If TRUE, the user can draw inside the canvas element. |
radius |
mandatory if the chosen shape is a 'Circle'. Defaults to NULL |
xPolygon |
a vector of the coordinate points of the polygon, from the left. |
yPolygon |
a vector of the coordinate points of the polygon, from the top |
a shape object inside a canvas
if(interactive()){ ui <- fluidPage( h2("Below you'll find a red Rectangle with a darkblue stroke"), fabric_shape(cid = "canvas", shapeId = "shape1", shape = "Rect") ) server <- function(input, output) { } shinyApp(ui = ui, server = server) }
if(interactive()){ ui <- fluidPage( h2("Below you'll find a red Rectangle with a darkblue stroke"), fabric_shape(cid = "canvas", shapeId = "shape1", shape = "Rect") ) server <- function(input, output) { } shinyApp(ui = ui, server = server) }
Add a shape object to a preexisting canvas element
fabric_shape_add( cid, shapeId, shape = "Rect", left = "100", top = "100", fill = "red", width = 200, height = 200, angle = 0, opacity = 1, strokecolor = "darkblue", strokewidth = 5, selectable = TRUE, radius = NULL, xPolygon = NULL, yPolygon = NULL )
fabric_shape_add( cid, shapeId, shape = "Rect", left = "100", top = "100", fill = "red", width = 200, height = 200, angle = 0, opacity = 1, strokecolor = "darkblue", strokewidth = 5, selectable = TRUE, radius = NULL, xPolygon = NULL, yPolygon = NULL )
cid |
the id of the canvas element you want to add your shape to |
shapeId |
the id of the shape object |
shape |
the shape of the object. Choices include 'Circle', 'Triangle' and 'Rect'. Defaults to 'Rect' |
left |
the shape's position from the left relative to the canvas element. Defaults to 100 |
top |
the shape's position from the top relative to the canvas element. Defaults to 100 |
fill |
the color of the shape. Defaults to 'red' |
width |
the width of the shape. Defaults to 200 |
height |
the height of the shape. Defaults to 200 |
angle |
the angle of rotation of the shape. Defaults to 0 (no rotation) |
opacity |
the opacity of the shape. Defaults to 1 |
strokecolor |
the stroke color of the shape. Defaults to 'darkblue' |
strokewidth |
the stroke width of the shape. Defaults to 5. |
selectable |
logical. If TRUE, the user can modify interactively the shape. Defaults to TRUE |
radius |
Mandatory if the chosen shape is a 'Circle'. Defaults to NULL |
xPolygon |
a vector of the coordinate points of the polygon, from the left. |
yPolygon |
a vector of the coordinate points of the polygon, from the top |
a shape object inside a preexisting canvas element
if (interactive()) { ui <- fluidPage( fabric_shape(cid = "canvas", shapeId = "shape1", shape = "Rect", left = 130, top = 200), fabric_shape_add(cid = "canvas", shapeId = "shapo", shape = "Circle", radius = 30, left = 100, top = 100), fabric_shape_add(cid = "canvas", shapeId = "shapa", shape = "Circle", radius = 30, left = 200, top = 100), fabric_shape_add(cid = "canvas", shapeId = "shapox", shape = "Circle", radius = 30, left = 300, top = 100), fabric_shape_add(cid = "canvas", shapeId = "shapor", shape = "Circle", radius = 30, left = 300, top = 100) ) server <- function(input, output) {} shinyApp(ui = ui, server = server) }
if (interactive()) { ui <- fluidPage( fabric_shape(cid = "canvas", shapeId = "shape1", shape = "Rect", left = 130, top = 200), fabric_shape_add(cid = "canvas", shapeId = "shapo", shape = "Circle", radius = 30, left = 100, top = 100), fabric_shape_add(cid = "canvas", shapeId = "shapa", shape = "Circle", radius = 30, left = 200, top = 100), fabric_shape_add(cid = "canvas", shapeId = "shapox", shape = "Circle", radius = 30, left = 300, top = 100), fabric_shape_add(cid = "canvas", shapeId = "shapor", shape = "Circle", radius = 30, left = 300, top = 100) ) server <- function(input, output) {} shinyApp(ui = ui, server = server) }
Insert text within canvas element
fabric_text( cid, cwidth = 800, cheight = 600, cfill = "#FFFFFF", textId, text, left = 100, top = 100, fill = "#2F3941", angle = 0, opacity = 1, fontFamily = "Comic Sans", fontSize = 40, fontStyle = "normal", strokecolor = "#282A36", strokewidth = 1, fontWeight = "normal", underline = FALSE, linethrough = FALSE, overline = FALSE, selectable = TRUE, shadow = FALSE, shadowCol = "#FFFAF0", textAlign = "center", lineHeight = 1, textBackgroundColor = NULL, isDrawingMode = FALSE )
fabric_text( cid, cwidth = 800, cheight = 600, cfill = "#FFFFFF", textId, text, left = 100, top = 100, fill = "#2F3941", angle = 0, opacity = 1, fontFamily = "Comic Sans", fontSize = 40, fontStyle = "normal", strokecolor = "#282A36", strokewidth = 1, fontWeight = "normal", underline = FALSE, linethrough = FALSE, overline = FALSE, selectable = TRUE, shadow = FALSE, shadowCol = "#FFFAF0", textAlign = "center", lineHeight = 1, textBackgroundColor = NULL, isDrawingMode = FALSE )
cid |
the id of the canvas element |
cwidth |
the width of the canvas element. Defaults to 800 |
cheight |
the height of the canvas element. Defaults to 600 |
cfill |
the color of the canvas element |
textId |
the id of the text |
text |
the content of the text |
left |
the text's position from the left relative to the canvas element. Defaults to 100 |
top |
the text's position from the top relative to the canvas element. Defaults to 100 |
fill |
the text's color. Defaults to '#2F3941' (dark shade of cyan-blue) |
angle |
the angle of rotation of the text. Defaults to 0 (no rotation) |
opacity |
text opacity (from 0 to 1). Defaults to 1 |
fontFamily |
the font family of the text. Defaults to 'Comic Sans' |
fontSize |
text sizing. Defaults to 40 |
fontStyle |
the font style of the text. Either 'normal' or 'italic' |
strokecolor |
the stroke color of the text Defaults to '#282A36' (Very dark grayish blue) |
strokewidth |
the stroke width of the text. Defaults to 1 |
fontWeight |
allows the user to make text thicker or thinner. Keywords can be used ('normal', 'bold'), or numbers. Defaults to 'normal' |
underline |
logical. Whether to underline the text or not. Defaults to FALSE |
linethrough |
logical. Whether to insert a line through the text or not. Defaults to FALSE |
overline |
logical. Whether to put a line above the text or not. Defaults to FALSE |
selectable |
logical. If TRUE, the user can modify interactively the image's size, position and rotation. Defaults to TRUE |
shadow |
logical. If TRUE a text shadow will be inserted behind the raw text. Defaults to FALSE |
shadowCol |
the color of the text shadow. Defaults to #FFFAF0 (floral white) |
textAlign |
the alignment of text. Useful when there are line breaks. Defaults to "center" |
lineHeight |
the height of the line breaks.Defaults to 1 |
textBackgroundColor |
the background color of the text, defaults to NULL |
isDrawingMode |
logical. If TRUE, the user can draw inside the canvas element. |
a text object within a canvas element
if (interactive()) { ui <- fluidPage( fabric_text(cid = "can", textId = "text", text = "But A Hero Is A Guy Who Gives Out The Meat To Everyone Else.", cfill = "#DD5347", left = 120, shadowCol = "blue", fontSize = 20, fontWeight = "bold", lineHeight = 3 ) ) server <- function(input, output) {} shinyApp(ui = ui, server = server) }
if (interactive()) { ui <- fluidPage( fabric_text(cid = "can", textId = "text", text = "But A Hero Is A Guy Who Gives Out The Meat To Everyone Else.", cfill = "#DD5347", left = 120, shadowCol = "blue", fontSize = 20, fontWeight = "bold", lineHeight = 3 ) ) server <- function(input, output) {} shinyApp(ui = ui, server = server) }
Add text within preexisting canvas element
fabric_text_add( cid, textId, text, left = 100, top = 100, fill = "#2F3941", angle = 0, opacity = 1, fontFamily = "Comic Sans", fontSize = 40, fontStyle = "normal", strokecolor = "#282A36", strokewidth = 1, fontWeight = "normal", underline = FALSE, linethrough = FALSE, overline = FALSE, selectable = TRUE, shadow = FALSE, shadowCol = "#324C63", textAlign = "center", lineHeight = 1, textBackgroundColor = NULL )
fabric_text_add( cid, textId, text, left = 100, top = 100, fill = "#2F3941", angle = 0, opacity = 1, fontFamily = "Comic Sans", fontSize = 40, fontStyle = "normal", strokecolor = "#282A36", strokewidth = 1, fontWeight = "normal", underline = FALSE, linethrough = FALSE, overline = FALSE, selectable = TRUE, shadow = FALSE, shadowCol = "#324C63", textAlign = "center", lineHeight = 1, textBackgroundColor = NULL )
cid |
the id of the canvas element |
textId |
the id of the text |
text |
the content of the text |
left |
the text's position from the left relative to the canvas element. Defaults to 100 |
top |
the text's position from the top relative to the canvas element. Defaults to 100 |
fill |
the text's color. Defaults to '#2F3941' (dark shade of cyan-blue) |
angle |
the angle of rotation of the text. Defaults to 0 (no rotation) |
opacity |
text opacity (from 0 to 1). Defaults to 1 |
fontFamily |
the font family of the text. Defaults to 'Comic Sans' |
fontSize |
text sizing. Defaults to 40 |
fontStyle |
the font style of the text. Either 'normal' or 'italic' |
strokecolor |
the stroke color of the text Defaults to '#282A36' (Very dark grayish blue) |
strokewidth |
the stroke width of the text. Defaults to 1 |
fontWeight |
allows the user to make text thicker or thinner. Keywords can be used ('normal', 'bold'), or numbers. Defaults to 'normal' |
underline |
logical. Whether to underline the text or not. Defaults to FALSE |
linethrough |
logical. Whether to insert a line through the text or not. Defaults to FALSE |
overline |
logical. Whether to put a line above the text or not. Defaults to FALSE |
selectable |
logical. If TRUE, the user can modify interactively the image's size, position and rotation. Defaults to TRUE |
shadow |
logical. If TRUE a text shadow will be inserted behind the raw text. Defaults to FALSE |
shadowCol |
the color of the text shadow. Defaults to #FFFAF0 (floral white) |
textAlign |
the alignment of text. Useful when there are line breaks. Defaults to "center" |
lineHeight |
the height of the line breaks.Defaults to 1 |
textBackgroundColor |
the background color of the text, defaults to NULL |
a text object within a preexisting canvas element
if (interactive()) { ui <- fluidPage( fabric_shape(cid = "canvas123", cfill = "lightblue", cwidth = 1000, shapeId = "tri1", shape = "Triangle", fill = "darkblue"), fabric_text_add(cid = "canvas123", textId = "txt1", text = "This is a darkblue Triangle !", left = 350 ) ) server <- function(input, output) {} shinyApp(ui = ui, server = server) }
if (interactive()) { ui <- fluidPage( fabric_shape(cid = "canvas123", cfill = "lightblue", cwidth = 1000, shapeId = "tri1", shape = "Triangle", fill = "darkblue"), fabric_text_add(cid = "canvas123", textId = "txt1", text = "This is a darkblue Triangle !", left = 350 ) ) server <- function(input, output) {} shinyApp(ui = ui, server = server) }