Incrustar una imagen con shinymanager R
Tengo una aplicación brillante en la que estoy usando el paquete shinymanager para manejar la autenticación de usuario. Estoy intentando agregar una imagen de mi carpeta www / como fondo de autenticación. Aquí hay un ejemplo práctico.
Cuando ejecute la aplicación, verá el logotipo "R" en el fondo. Tengo una imagen llamada "pabackground.png" en mi carpeta www /. Así es como se ve la estructura actual de mi brillante aplicación.
| shinyApp/
| ui.R
| server.R
| www/
| pabackground.png
He probado algunas ideas como url ('www / pabackground') e img (src = 'www / pabackground') sin suerte. Gracias por tu ayuda.
Código de aplicación
if (interactive()) {
library(shiny)
library(shinymanager)
credentials <- data.frame(
user = c("fanny", "victor"),
password = c(scrypt::hashPassword("azerty"), scrypt::hashPassword("12345")),
is_hashed_password = TRUE,
comment = c("alsace", "auvergne"),
stringsAsFactors = FALSE
)
# app
ui <- fluidPage(
# authentication module
auth_ui(
id = "auth",
tags_top =
tags$div( tags$h4("Demo", style = "align:center"),
tags$img( #i would like to change this picture to a picture from my www/ folder src = "https://www.r-project.org/logo/Rlogo.png", width = 100 ) ), tags_bottom = tags$div(
tags$p( "For any question, please contact ", tags$a(
href = "mailto:[email protected]?Subject=Shiny%20aManager",
target="_top", "administrator"
)
)
),
# change auth ui background ?
# https://developer.mozilla.org/fr/docs/Web/CSS/background
background = "linear-gradient(rgba(0, 0, 255, 0.5),
rgba(255, 255, 0, 0.5)),
url('https://www.r-project.org/logo/Rlogo.png');",
choose_language = TRUE
),
# result of authentication
verbatimTextOutput(outputId = "res_auth"),
# classic app
headerPanel('Iris k-means clustering'),
sidebarPanel(
selectInput('xcol', 'X Variable', names(iris)),
selectInput('ycol', 'Y Variable', names(iris),
selected=names(iris)[[2]]),
numericInput('clusters', 'Cluster count', 3,
min = 1, max = 9)
),
mainPanel(
plotOutput('plot1')
)
)
server <- function(input, output, session) {
# authentication module
auth <- callModule(
module = auth_server,
id = "auth",
check_credentials = check_credentials(credentials)
)
output$res_auth <- renderPrint({ reactiveValuesToList(auth) }) # classic app selectedData <- reactive({ req(auth$result) # <---- dependency on authentication result
iris[, c(input$xcol, input$ycol)]
})
clusters <- reactive({
kmeans(selectedData(), input$clusters) }) output$plot1 <- renderPlot({
palette(c("#E41A1C", "#377EB8", "#4DAF4A", "#984EA3",
"#FF7F00", "#FFFF33", "#A65628", "#F781BF", "#999999"))
par(mar = c(5.1, 4.1, 0, 1))
plot(selectedData(),
col = clusters()$cluster, pch = 20, cex = 3) points(clusters()$centers, pch = 4, cex = 4, lwd = 4)
})
}
shinyApp(ui, server)
}
Respuestas
Si la imagen está disponible en la wwwcarpeta, no addResourcePathes necesario utilizar . El prefijo de la wwwcarpeta es "/". Por favor mira esto .
En consecuencia, lo siguiente debería ser suficiente:
tags$img(
src = "/pabackground.png", width = 100
)
Como señaló @ismisehregal, no tiene que usar addResourcePathcuando las imágenes están en la wwwsubcarpeta de la aplicación.
En caso de que estén en otra subcarpeta, debe usar addResourcePathpara permitir que brillos los sirva.
Por ejemplo, si su imagen está en la subcarpeta "imágenes" de su aplicación y desea publicarla en la sub-URL "logo":
addResourcePath(prefix = "logo", directoryPath = "pics")
...
ui <- fluidPage(
# authentication module
auth_ui(
id = "auth",
tags_top =
tags$div( tags$h4("Demo", style = "align:center"),
tags$img(
src = "logo/pabackground.png", width = 100
)
),
...