在R-Shiny中将base64 JPG保存到磁盘

时间:2016-10-09 10:12:25

标签: r image shiny jpeg

我有以下数据框,可以从here下载。列image_path包含base64格式的jpg文件。我想提取图像并将其存储在本地文件夹中。我尝试使用herehere给出的代码。

虽然第二个完全打开浏览器中的图像,但我无法弄清楚如何在本地保存文件。我尝试了以下代码:

library(shiny)
for (i in 1:length(df)){
file <- paste(df$id[i])
png(paste0(~images/file, '.png'))
tags$img(src = df$image_path[i])
dev.off()
}

以下只是运行,但不会创建任何图像文件,也不会显示错误。当我尝试运行tags$img(src = df$image_path[1])以查看它是否生成图像时,却没有。我理解标签$ img是一个闪亮的函数,当我在ui中传递它时会起作用(如@daatali所建议),但不知道如何在本地保存文件。

我想要的是从闪亮的服务器环境中运行for循环,并使用id号作为文件名将本地图像保存为jpg,可以使用调查中捕获的各种其他详细信息进行渲染。

我从未使用过图像,如果这完全是新手,请耐心等待。

1 个答案:

答案 0 :(得分:1)

这将从base64字符串创建您的图像,并将文件保存到您当前的工作目录,子文件夹&#34; / images /&#34; This article describes pretty well how to save files locally in Shiny.

library(shiny)
library(base64enc)
filepath <- "images/"
dir.create(file.path(filepath), showWarnings = FALSE)
df <- read.csv("imagefiletest.csv", header=T, stringsAsFactors = F)
for (i in 1:nrow(df)){
  if(df[i,"image_path"] == "NULL"){
    next
  }
  testObj <- strsplit(df[i,"image_path"],",")[[1]][2]
  inconn <- testObj
  outconn <- file(paste0(filepath,"image_id",df[i,"id"],".png"),"wb")
  base64decode(what=inconn, output=outconn)
  close(outconn)
}

enter image description here