如何在闪亮的应用程序中创建一堆上传的图像

时间:2019-06-13 13:58:26

标签: r shiny

我下面有一个闪亮的应用程序,可以进行图像识别。我上传了下面的图片,并且您将看到它的显示。问题是我想在stack()函数中使用此文件的名称(“ DJI_0104.jpg”)来创建图像堆栈。然后我绘制结果(纹理)。基本上,我正在寻找一种仅使用上载图像名称的方法,例如在R104()中有效的方法。您可以找到.jpg here

library(shiny)
library(base64enc)
library(raster)
library(glcm)
options(shiny.maxRequestSize = 30*1024^2)

ui <- fluidPage(
  fileInput("upload", "Upload image", accept = "image/png"),
  uiOutput("image"),
  plotOutput("textures")
)

server <- function(input, output){

  base64 <- reactive({
    inFile <- input[["upload"]]
    if(!is.null(inFile)){
      dataURI(file = inFile$datapath, mime = "image/png")
    }
  })

  output[["image"]] <- renderUI({
    if(!is.null(base64())){
      tags$div(
        tags$img(src= base64(), width="100%"),
        style = "width: 400px;"
      )
    }
  })
  #That does not work
  R105 <- reactive({
    stack(base64())
  })
  #That works
  R104 <- reactive({
    stack("DJI_0104.jpg")
  })
  textures <- reactive({
    glcm(raster(R105(), layer=3))
  })
  output$textures<-renderPlot({
    #Create a stack of the image

    plot(textures())
  })

}

shinyApp(ui, server)

1 个答案:

答案 0 :(得分:1)

您可以找到更多详细信息here,但这是一个解决方案:在base64()反应式中,inFile是在fileInput()的输出之后构建的,输出具有4字段:namesizetypedatapath(请参见上面的链接)。 正如Stéphane Laurent所强调的那样,使用inFile$name将使您的ShinyApp正常工作。

最好。