【问题标题】:How to display base64 images in R如何在 R 中显示 base64 图像
【发布时间】:2017-09-04 08:21:45
【问题描述】:

我正在尝试在 R 中显示 base64 图像。假设我有一个包含代码的变量,例如。

image<-"agQDL64bK8x2..."

有没有类似的包或者命令

plot(image)

显示对应的图片?

这里有完整的解释。我从外部输入中获取字符串 base64 变量。 base64代码如下:

x<-"/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/wAALCAAgACABAREA/8QAGAABAQEBAQAAAAAAAAAAAAAABQYDBAH/xAAjEAABBQEAAgMBAQEBAAAAAAACAQMEBQYHCBIRExQhACJB/9oACAEBAAA/ABMfwnJcK0WrucdoMdrtpQ3IQOm+VPVq49RGh6AvT2qcjUGhrY2jZChASC4X/BtkSo4yiadt3/R6/esuXXbvKuv0QwGJ05nWeR+b5bOeJ1FNHQysaHPkQWFD1JBmI2oi4Psif34e028heSoUhdBl3/VW2oci1zlq45SMdUzIVrLDkmfk9bQOHWaNYJG+8/AL6pifSBqyXqgrJdA65t+L9tY8go8+DovILx6q6zR6PQ0kT8MHyP5RYE2w1dfQKKJSo4E2y+RCotfDa/YZxWxbodE9FpbsmMTH0+Z5/wAqc0HOuXu5+PFWwoM9QJHZ0uir3iJWiv763mQ6uHLFv3bOa44vyY+y8kORouc1TtDB04U8CsfVJldkpUhioZdE1Rx1pv7BGSRKKiE2ar8+Y36yJEpP0JDhetY6Vodva2RvpX3E52JMeuiMnJVbbtSBZp57xOL9rr8KW/ElsOPKTwshIj/P45rrH+W4llarZ9s5dBbWozWH3cno+YkU0WHHYars1o+f1m0Ko9mhAVjQbCylI2Px8ChfH8+P8BxDMWuL4hyqIyFnf7nBxehZqRQR40mUsvSZroVXtXKhFbE1GXNra6UjSKnsZNin9/n+2TNP5Dn0+wSQzos3GajPPzHHxZh2FO6CBUWThGiMsMS4wMSo7j6g197kiJ7frhOsKJn7HPdmsnIUXQJfrKivJLqchOiTbFpgvkHXh+HCWIIoXqk+w/PXw1UJLkgijpCmM3s6drqD8GMh5vRdF7HH0HPeZrRQZCQr650LjA6nTwzNRfaoaeqhRKqFJ9V924JuKKB7KND0HqWP7RxVvyFYmz894/8AkHY1mh1N/n4yzp3jd1mvRtlq7/MPwYxZB+jb5KKG8htl9gJIZF2W0e2meOEOjf6HLzvLSGRJtMtcoN1Ycl0L1jIjm/Pyeqz7rdpmlnCEl1+CiuQyR1DJkPYQFvtO85kOEhrb9s8V5OXWeFnYhrPITWdgYjl6GSSGcuEaHHlviZeyDNF5PYU9kX/3pz3jzre35faaDP3OxwXP9PVJD6t5SdcghnLK5pPltFqMtTl6pXVTwkKt/AgJIf1KSKy0B//Z"

我只是想显示这张图片,可能在一个情节中。

非常感谢您的帮助

【问题讨论】:

标签: r image plot base64


【解决方案1】:

假设您在txt 中有一个透明的 PNG:

library(RCurl)
getImg <- function(txt) {
  raw <- base64Decode(txt, mode="raw")
  if (all(as.raw(c(0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a))==raw[1:8])) { # it's a png...
    img <- png::readPNG(raw)
    transparent <- img[,,4] == 0
    img <- as.raster(img[,,1:3])
    img[transparent] <- NA
  } else if (all(as.raw(c(0xff, 0xd8, 0xff, 0xd9))==raw[c(1:2, length(raw)-(1:0))])) { # it's a jpeg...
    img <- jpeg::readJPEG(raw)
  } else stop("No Image!")
  return(img)
}
par(mfrow = c(1,2))
fn <- system.file("img", "Rlogo.png", package="png")
txt <- base64Encode(readBin(fn, "raw", file.info(fn)[1, "size"]), "txt")
plot(1:2, type='n')
rasterImage(getImg(txt), 1.2, 1.27, 1.8, 1.73, interpolate=FALSE)
txt <- "/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/wAALCAAgACABAREA/8QAGAABAQEBAQAAAAAAAAAAAAAABQYDBAH/xAAjEAABBQEAAgMBAQEBAAAAAAACAQMEBQYHCBIRExQhACJB/9oACAEBAAA/ABMfwnJcK0WrucdoMdrtpQ3IQOm+VPVq49RGh6AvT2qcjUGhrY2jZChASC4X/BtkSo4yiadt3/R6/esuXXbvKuv0QwGJ05nWeR+b5bOeJ1FNHQysaHPkQWFD1JBmI2oi4Psif34e028heSoUhdBl3/VW2oci1zlq45SMdUzIVrLDkmfk9bQOHWaNYJG+8/AL6pifSBqyXqgrJdA65t+L9tY8go8+DovILx6q6zR6PQ0kT8MHyP5RYE2w1dfQKKJSo4E2y+RCotfDa/YZxWxbodE9FpbsmMTH0+Z5/wAqc0HOuXu5+PFWwoM9QJHZ0uir3iJWiv763mQ6uHLFv3bOa44vyY+y8kORouc1TtDB04U8CsfVJldkpUhioZdE1Rx1pv7BGSRKKiE2ar8+Y36yJEpP0JDhetY6Vodva2RvpX3E52JMeuiMnJVbbtSBZp57xOL9rr8KW/ElsOPKTwshIj/P45rrH+W4llarZ9s5dBbWozWH3cno+YkU0WHHYars1o+f1m0Ko9mhAVjQbCylI2Px8ChfH8+P8BxDMWuL4hyqIyFnf7nBxehZqRQR40mUsvSZroVXtXKhFbE1GXNra6UjSKnsZNin9/n+2TNP5Dn0+wSQzos3GajPPzHHxZh2FO6CBUWThGiMsMS4wMSo7j6g197kiJ7frhOsKJn7HPdmsnIUXQJfrKivJLqchOiTbFpgvkHXh+HCWIIoXqk+w/PXw1UJLkgijpCmM3s6drqD8GMh5vRdF7HH0HPeZrRQZCQr650LjA6nTwzNRfaoaeqhRKqFJ9V924JuKKB7KND0HqWP7RxVvyFYmz894/8AkHY1mh1N/n4yzp3jd1mvRtlq7/MPwYxZB+jb5KKG8htl9gJIZF2W0e2meOEOjf6HLzvLSGRJtMtcoN1Ycl0L1jIjm/Pyeqz7rdpmlnCEl1+CiuQyR1DJkPYQFvtO85kOEhrb9s8V5OXWeFnYhrPITWdgYjl6GSSGcuEaHHlviZeyDNF5PYU9kX/3pz3jzre35faaDP3OxwXP9PVJD6t5SdcghnLK5pPltFqMtTl6pXVTwkKt/AgJIf1KSKy0B//Z"
plot(1:2, type='n')
rasterImage(getImg(txt), 1.2, 1.27, 1.8, 1.73, interpolate=FALSE)

【讨论】:

  • 即将基于RCurl::base64 发布类似的内容。不要认为总是需要将透明度设置为 NA:我可以在 readPNG 之后不久绘制徽标(不过我猜它可能取决于设备)。
  • 非常感谢,它工作正常。就一件事。在您的示例中,您通过函数 base64Encode 获取 base64 代码。相反,如果我的 base64 代码来自外部源并保存在 chr 变量中怎么办?
  • @nicola 是的,这可能是真的 - 我刚刚从 ?png::readPNG 的示例部分获取了绘图代码。
  • 是的,问题是当我尝试应用命令readPNG 时,我收到错误Error in readPNG(raw) : libpng error: Not a PNG file。我无法在此处粘贴我的 base64 字符串,因为太长了
  • @MarcoDeVirgilis 你得到的是 jpeg,而不是 png。使用img &lt;- jpeg::readJPEG(raw);plot(1:2, type='n');rasterImage(img, 1.2, 1.27, 1.8, 1.73)
猜你喜欢
  • 2021-12-20
  • 2021-11-02
  • 1970-01-01
  • 2022-01-23
  • 2019-11-08
  • 1970-01-01
  • 1970-01-01
  • 2019-06-25
  • 2013-01-31
相关资源
最近更新 更多