Convert R image to Base 64
Asked Answered
G

3

14

I want to see find the base64 encoding of an image, so I can save a plot as part of a JSON file or embedded into an HTML page.

library(party)
irisct <- ctree(Species ~ ., data = iris)
plot(irisct, type="simple")

Are there other ways to share an R image over the web?

Gouache answered 29/10, 2015 at 8:35 Comment(0)
F
14

I don't know exactly what you want to accomplish, but here is an example:

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

enter image description here

Flypaper answered 29/10, 2015 at 9:46 Comment(0)
S
13

You could try using knitr

library(knitr)

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

the printImageURI function takes the filename of a file on disk (I use it quite often with PNG files generated by ggplot). It works great with Firefox, Chrome and IE.

Singh answered 29/10, 2015 at 10:24 Comment(1)
Why do you have fire.remove in the code? seems dangerous.Sidecar
I
10

If you have the package base64enc installed, it's much simpler, with equivalent results (assuming you have the image file.png already on disk):

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

But using knitr::image_uri("file.png") (see Bert Neef's answer) is even simpler!

Insolvable answered 23/1, 2018 at 9:29 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.