以Shiny方式绘制用户选择的图像

时间:2018-08-02 19:43:16

标签: r image shiny

这是我首次尝试创建Shiny应用程序,因此我想做一些非常简单的事情:使用fileInput,以便用户可以选择计算机上的图像,然后renderImage绘制图像。

library(shiny)

# Define UI for application that draws a histogram
ui <- fluidPage(

   # Application title
   titlePanel("plot image"),

   # Sidebar with a slider input for number of bins 
   sidebarLayout(
      sidebarPanel(
         fileInput("image",
                     "Select your image:", placeholder = "No file selected")
      ),

      # Show a plot of the generated distribution
      mainPanel(
        plotOutput("photo")
      )
   )
)

# Define server logic required to draw a histogram
server <- function(input, output) {

     output$photo <- renderImage({
      img <- load.image(input$image) 
      plot(img)
   })
}

# Run the application 
shinyApp(ui = ui, server = server)

但是,当我尝试以此加载图像时,出现错误:无效的文件名参数

最终,我想集成selectInput的{​​{1}}选项将具有一些默认图像以及用户使用choices上传的图像,但是我觉得我已经在前进我自己。

更新1:

fileInput

2 个答案:

答案 0 :(得分:0)

请参见?fileInput。如果"image"是id,则上载文件的路径是input$image$datapath,而不是input$image

因此您可以执行以下操作:

output$photo <- renderImage({
  req(input$image)
  list(src = input$image$datapath, alt="alternative text")
})

ui中的

imageOutput("photo")

答案 1 :(得分:0)

我遇到了同样的问题并解决了。无法加载图像是因为input$image不仅提供了所需的文件名,还提供了更多信息。这使其成为一个命名列表,而不是单个值。也许您可以在第一种情况下尝试以下方法。

server <- function(input, output) {

     output$photo <- renderImage({
      img <- load.image(input$image[[4]]) 
      plot(img)
   })
}

希望它能起作用。