如何解决downloadHandler在使用R Shiny下载图像时出错
我花了最后几天尝试添加一个按钮,以在我闪亮的应用程序中下载图像,但我收不到。我之前已经在其他应用程序中完成过此操作,但是这一操作不起作用。该应用程序选择两个图像(或三个图像),并将它们与所需的透明度合并。应用程序中的图像看起来很完美,问题仅在于下载。服务器代码如下;
library(shiny)
library(abind)
library(jpeg)
library(rsconnect)
shinyServer(function(input,output) {
output$myImage <- renderImage({
# A temp file to save the output.
# Return a list containing the filename and alt text
outfile <- tempfile(fileext = '.png')
image1 = jpeg::readJPEG(file.path(
paste(input$map1,'.jpeg',sep='')))
image2 = jpeg::readJPEG(file.path(
paste(input$map2,sep='')))
image3 = jpeg::readJPEG(file.path(
paste(input$map3,sep='')))
image1 = abind::abind(image1,image1[,1]) # add an alpha channel
image1[,4] = input$trans1 # set alpha to semi-transparent
image2 = abind::abind(image2,image2[,1]) # add an alpha channel
image2[,4] = input$trans2
image3 = abind::abind(image3,image3[,1]) # add an alpha channel
image3[,4] = input$trans3
if(input$n==0){
png(outfile,width = 4,height = 4,units = 'in',res = 300)
par(mai=c(0,0))
plot.new()
rasterImage(image1,1,1)
rasterImage(image2,1)
dev.off()
}
if(input$n==1){
png(outfile,width = 2,height = 2,1)
rasterImage(image3,1)
dev.off()
}
# Return a list containing the filename
list(src = outfile,contentType = 'image/png',width = 600,height = 400,alt = "This is alternate text")
},deleteFile = FALSE)
output$downloadImage <- downloadHandler(
filename = "Image.png",contentType = "image/png",content = function(file) {
## copy the file from the updated image location to the final download location
file.copy(outfile,file)
}
)
}
ui代码如下:
library(abind)
library(shiny)
library(rsconnect)
library(jpeg)
library(shiny)
library(shinyBS)
library(shinyjs)
shinyUI(fluidPage(
tags$head(tags$style(
HTML('
#sidebar {
float: right;
background-color: white;
border-bottom: 1px solid #e6e6e6;
border-radius: 0;
}
body,label,input,button,select {
font-family: "Open Sans",Arial,sans-serif;
}')
)),sidebarLayout(position = "right",sidebarPanel(
selectInput(inputId = "map1",label = "Mapa 1:",choices = c("Mapa 1","Mapa 2","Mapa 3","Mapa 4","Mapa 5"),selected = "Normal"),sliderInput(inputId = "trans1",label = "Transparencia mapa 1:",min = 0,max = 1,value = 0.5,step = 0.1),selectInput(inputId = "map2",label = "Mapa 2:",sliderInput(inputId = "trans2",label = "Transparencia mapa 2:",hr(),checkboxInput( "n","Anadir otro mapa:",FALSE),conditionalPanel(condition = "input.n==1",selectInput(inputId = "map3",label = "Mapa 3:",selected = "Normal")),sliderInput(inputId = "trans3",label = "Transparencia mapa 3:",step = 0.1)
),downloadButton('downloadImage','Download modified image'),hr()
),mainPanel(
imageOutput("myImage")
)
)))
当我推送下载时,第一件事不是尝试下载“ Image.png”,而是下载了没有扩展名的“ downloadImage”文件。然后,如果我接受,则会出现以下错误:
Anyobdy知道哪个错误?我很绝望!
谢谢
解决方法
outfile
在renderImage
内部定义,然后在downloadHandler
中不存在。因此,请在您的server
函数的根目录中定义它:
shinyServer(function(input,output) {
outfile <- tempfile(fileext = '.png')
output$myImage <- renderImage({
......
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。