2

I am building a render image app using rshiny. I have 10 different folder and each folder has 300 image in it. I did not want to put all these 3000 image into one www folder. Is there any way I can code in the server script that I can go to the relative folder and find the right image I am looking for.

I search the rshiny official website, it said:

img(src = "my_image.png", height = 72, width = 72)

The img function looks for your image file in a specific place. Your file must be in a folder named www in the same directory as the app.R script. Shiny treats this directory in a special way. Shiny will share any file placed here with your user’s web browser, which makes www a great place to put images, style sheets, and other things the browser will need to build the wep components of your Shiny app.

I will use the rshiny website's example

library(shiny)
ui <- fluidPage(
  titlePanel("My Shiny App"),
  sidebarLayout(
    sidebarPanel(),
    mainPanel(
      img(src = "rstudio.png", height = 140, width = 400)
    )
  )
)

server <- function(input, output) {
  
}

shinyApp(ui = ui, server = server)

However, instead one image in the www folder. I have 10 different folder and each folder has 300 image in it.

I hope I can get some help. Thanks!

hard worker
  • 181
  • 8

1 Answers1

1

We can use renderImage() that allows to pass a folder path. Here is an example:

library(shiny)


ui <- fluidPage(
    titlePanel("My Shiny App"),
    sidebarLayout(
        sidebarPanel(textInput('image_path', label = 'File Path:'),
        actionButton('send_path', 'Get Image')),
        mainPanel(
            imageOutput('my_image'),
            imageOutput('my_path_image')
        )
    )
)

server <- function(input, output) {
 
    output$my_image <- renderImage({
        list(src = '~/test.png') #use ~ to acces the home folder.
    }, deleteFile = FALSE)
    
    observeEvent(input$send_path, {
        
    output$my_path_image <- renderImage({
        list(src = input$image_path) 
    }, deleteFile = FALSE)
    
    })
       
}

shinyApp(ui = ui, server = server)
jpdugo17
  • 6,816
  • 2
  • 11
  • 23