Преобразование изображения R в базу 64
Я хочу увидеть, как найти кодировку base64 изображения, чтобы я мог сохранить график как часть файла JSON или встроенного в страницу HTML.
library(party)
irisct <- ctree(Species ~ ., data = iris)
plot(irisct, type="simple")
Существуют ли другие способы передачи изображения R через Интернет?
Ответы
Ответ 1
Я точно не знаю, что вы хотите выполнить, но вот пример:
# 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)
![введите описание изображения здесь]()
Ответ 2
Вы можете попробовать использовать 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.
Ответ 3
Если у вас установлен пакет 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")
(см. ответ Bert Neef) еще проще!