将R图像转换为Base 64

jbe*_*est 11 base64 r image

我一直在做一些决策树情节,如下所示

library(party)
irisct <- ctree(Species ~ ., data = iris)
plot(irisct, type="simple")
Run Code Online (Sandbox Code Playgroud)

但现在我想看到图像的基础64,所以我可以将图形保存为JSON.

或者是否有另一种方式将R图像发送到网络?

luk*_*keA 12

我不知道你想要完成什么,但这是一个例子:

# save example plot to file
png(tf1 <- tempfile(fileext = ".png")); plot(0); dev.off()

# Base64-encode file
library(RCurl)
txt <- base64Encode(readBin(tf1, "raw", file.info(tf1)[1, "size"]), "txt")

# Create inline image, save & open html file in browser 
html <- sprintf('<html><body><img src="data:image/png;base64,%s"></body></html>', txt)
cat(html, file = tf2 <- tempfile(fileext = ".html"))
browseURL(tf2)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Ber*_*eef 10

你可以尝试使用knitr

library(knitr)

printImageURI<-function(file){
  uri=image_uri(file)
  file.remove(file)
  cat(sprintf("<img src=\"%s\" />\n", uri))    
}
Run Code Online (Sandbox Code Playgroud)

printImageURI函数获取磁盘上文件的文件名(我经常使用ggplot生成的PNG文件).它适用于Firefox,Chrome和IE.

  • 为什么代码中有 fire.remove ?看起来很危险。 (2认同)

sgr*_*yon 10

如果您安装了该软件包,那么它会更简单,并且具有相同的结果(假设您的磁盘上已经base64enc有该映像):file.png

# Using RCurl:
txt1 <- RCurl::base64Encode(readBin("file.png", "raw", file.info("file.png")[1, "size"]), "txt")

# Using base64encode:
txt2 <- base64enc::base64encode("file.png")

html1 <- sprintf('<html><body><img src="data:image/png;base64,%s"></body></html>', txt1)
html2 <- sprintf('<html><body><img src="data:image/png;base64,%s"></body></html>', txt2)
# This returns TRUE:
identical(html1, html2)
Run Code Online (Sandbox Code Playgroud)

但使用knitr::image_uri("file.png")(参见 Bert Neef 的回答)更简单!