我打算制作一个Shiny应用程序,用户上传带有位置数据的文件,应用程序返回显示这些位置数据的动画gif(在完成一些计算之后)。当应用程序在我的计算机上本地运行时,一切正常。
此外,在线运行时,大多数元素运行良好。我无法弄清楚的是,当应用程序部署在shinyapps.io时,如何将动画gif返回给用户。无论我是尝试通过renderImage还是在downloadButton中返回它都会出错。
我尝试了无数的SaveGIF和gganimate组合,并结合了downloadHandler或renderImage。我寻求灵感here,here和here仅举几例。 我也看到过类似问题的帖子(例如here)。我慢慢开始对此失去理智,并且非常感谢解决方案或提示。
我非常确定有一些关于闪亮的在线内部文件存储规则和系统我还没有得到的东西。例如,将(计算的)数据的png文件返回到renderImage或downloadHandler(作为here) 工作良好。但是,当输出格式为gif时,我从来没有做对。
下面显示了使用renderImage的尝试。我已从文件输入内容中抽象出来,因此下面的最小可重现示例生成一个简单的虚拟数据集,并在单独的图片中进行动画处理后将其放入临时目录。当应用程序处于审阅窗格中时,它可以正常工作。部署后,我得到“这是替代文本”。似乎我可以在临时目录中看到单个图像,但不知何故动画GIF会丢失。关于如何在浏览器中将动画GIF作为图像或准备下载的文件返回的解决方案或提示,将会非常高兴,没有任何反对意见。
library(shiny)
library(animation)
#UI
ui <- basicPage(
imageOutput("plot1")
)
#Server
server <- function(input, output) {
data1_reactive <- reactive({
x <- c(1,2,3)
y <- c(2,4,5)
data_try <- data.frame(x,y)
return(data_try)
})
output$plot1 <- renderImage({
saveGIF(
for (i in 1:3) {
plot(data1_reactive()$x,data1_reactive()$y,type="p",col="black",xlim=c(0,10),ylim=c(0,10),pch=19)
lines(data1_reactive()[i,]$x,data1_reactive()[i,]$y,type="p",col="red",xlim=c(0,10),ylim=c(0,10),pch=19)
ani.pause()}, movie.name = 'test.gif', interval = 0.3,ani.width = 1400, ani.height = 900,outdir=tempdir())
# Return a list containing the filename
list(src = paste0(tempdir(),"/test.gif"),
contentType = 'image/gif',
alt = "This is alternate text"
)}, deleteFile = FALSE)
}
shinyApp(ui, server)
答案 0 :(得分:0)
https://groups.google.com/forum/#!msg/shiny-discuss/1Pq_awTkj_A/g7jsk6AWjqQJ 实际上,关于saveGIF中的outdir参数存在一个错误。幸运的是,作者已经解决了这一问题。您可以摆脱outdir = ...,并保持movie.name ='test.gif'。 src = paste0(tempdir(),“ / test.gif”下面的部分应更改为src ='test.gif'。应该可以!