0

我有一个闪亮的应用程序,它使用包生成 wordcloud wordcloud2。我正在使用该capture包来截取 wordcloud 的屏幕截图。我还尝试过其他类似的软件包,例如shinyscreenshotsnapper. 它们都提供了一种截取应用程序的一部分或整个应用程序的屏幕截图并下载屏幕截图的方法。但是在我的用例中,当我单击按钮而不是下载它时,我需要将图像保存到应用程序的根目录中。有没有办法这样做?

这是一个可重现的示例:

library(shiny)
library(shinydashboard)
library(wordcloud2)
library(capture)

ui <- dashboardPage(
  title = "wordcloud",
  header = dashboardHeader(
    title = "Wordcloud"
  ),
  sidebar = dashboardSidebar(),
  body = dashboardBody(
    fluidRow(
      column(width = 3),
      column(
        width = 6,
        box(
          title = "wordcloud", solidHeader = TRUE, status = "primary", width = 12,
          wordcloud2Output("wordcloud")
        ),
        id = "cloud"
      ),
      column(width = 3)
    ),
    fluidRow(
      div(
        capture(
          selector = "#cloud",
          filename = "cloud",
          icon("camera"), "Downlaod wordcloud",
          format = "png"
        ),
        style = "text-align: center;"
      )
    )
  )
)

server <- function(input, output){
  output$wordcloud <- renderWordcloud2(
    wordcloud2(demoFreq, size=1, color='random-dark')
  )
}

shinyApp(ui, server)

提前致谢。

4

1 回答 1

0

最新版本的 shinyscreenshoot (0.1.0) 确实只允许您下载 png 文件。有一个用于将文件保存到服务器目录的新选项。让我们安装新版本:

devtools::install_github("daattali/shinyscreenshot@a4d374d")

单击此应用程序上的按钮将触发screenshoot.png在服务器磁盘上的 R 会话的当前工作目录中创建一个文件:

library(shiny)
library(shinydashboard)
library(wordcloud2)
library(shinyscreenshot)

ui <- dashboardPage(
  title = "wordcloud",
  header = dashboardHeader(
    title = "Wordcloud"
  ),
  sidebar = dashboardSidebar(),
  body = dashboardBody(
    fluidRow(
      column(width = 3),
      column(
        width = 6,
        box(
          title = "wordcloud", solidHeader = TRUE,
          status = "primary", width = 12,
          wordcloud2Output("wordcloud")
        ),
        id = "cloud"
      ),
      column(width = 3)
    ),
    fluidRow(
      actionButton("save_screenshoot", "Save screenshoot")
    )
  )
)

server <- function(input, output){
  output$wordcloud <- renderWordcloud2(
    wordcloud2(demoFreq, size=1, color='random-dark')
  )
  
  observeEvent(input$save_screenshoot, {
    screenshot(
      selector = "#wordcloud",
      download = FALSE,
      server_dir = ".",
      filename = "screenshoot",
    )
  }
  )
}

shinyApp(ui, server)
于 2021-11-23T09:05:48.937 回答