Конвертировать R изображения в Base 64

Я делал некоторый график дерева решений, как показано ниже

library(party)
irisct <- ctree(Species ~ .,data = iris)

plot(irisct,type="simple")

Но теперь я хочу увидеть базовые 64 изображения, чтобы я мог сохранить график в JSON.

Или есть другой способ отправить изображение R в сеть?

3 ответа

Решение

Я не знаю точно, чего вы хотите достичь, но вот пример:

# 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)

Вы можете попробовать использовать Knitr

library(knitr)

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

функция printImageURI берет имя файла файла на диске (я использую его довольно часто с файлами PNG, сгенерированными ggplot). Отлично работает с Firefox, Chrome и IE.

Если у вас есть пакет 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)

Но используя knitr::image_uri("file.png") (см. ответ Берта Нифа) еще проще!

Другие вопросы по тегам