R 如何将内存中的png图像添加到绘图?

R 如何将内存中的png图像添加到绘图?,r,ggplot2,png,R,Ggplot2,Png,我有一个png图像,它是在内存中自动生成的,而不是从磁盘加载。我当然可以先将它保存到磁盘,但我不想这样做。我想在ggplot2绘图中的某个位置显示该图像,但找不到正确的包/函数 我记忆中的图像是例如 x <- "data:image/png;base64,..." x数据:图像/png;base64,IVBORW0KGGOAAAANSUHEUGAABUAAVCAAACMFPPKAAAACXBIWXMAAC4JAAAAAUIWF4PT92AAFELEQVQYLU2QWWREMAWDR0VU

我有一个png图像,它是在内存中自动生成的,而不是从磁盘加载。我当然可以先将它保存到磁盘,但我不想这样做。我想在ggplot2绘图中的某个位置显示该图像,但找不到正确的包/函数

我记忆中的图像是例如

x <- "data:image/png;base64,..."
x数据:图像/png;base64,IVBORW0KGGOAAAANSUHEUGAABUAAVCAAACMFPPKAAAACXBIWXMAAC4JAAAAAUIWF4PT92AAFELEQVQYLU2QWWREMAWDR0VUF+XZJ8QJSYYNYNYJAKAMQNFHKBCKKKZON7+9AZWQOGRx/2YYO0GYDPWSZW5EUCS/UR78NZTGVSAZDPDGTTSONOT8LTDFNNN4YLZJJ0AJJ0AJN7K4J0AJ0N7K4J0K4G4G4G4G7N7N7N7K4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G==
我还尝试了以下操作,但出现了不同的错误:

qrGrob <- grid::gTree(children=gList(grid::rasterGrob(x)))
qrGrob这可能有效:

  • 从向量中读取图像
  • 渲染图像
  • 使用空白
    ggplot2
    geom打印
代码:

myImage这可能有效:

  • 从向量中读取图像
  • 渲染图像
  • 使用空白
    ggplot2
    geom打印
代码:


myImage我找不到任何方法从内存加载PNG。但是,使用光栅版本时,另一种方法可以完美地工作:

library(ggplot2)
library(raster)
library(qrencoder)
library(grid)
qrGrob <- grid::rasterGrob(raster::as.raster(
                 qrencoder::qrencode_raster("http://rud.is/b"), 
                 maxpixels=.Machine$integer.max,col=c("white", "black")),
                 interpolate=FALSE)    
ggplot() + geom_blank() + annotation_custom(qrGrob,0,1,0,1) 
库(ggplot2)
图书馆(光栅)
库(QR编码器)
图书馆(网格)

qrGrob我找不到任何方法从内存加载PNG。但是,使用光栅版本时,另一种方法可以完美地工作:

library(ggplot2)
library(raster)
library(qrencoder)
library(grid)
qrGrob <- grid::rasterGrob(raster::as.raster(
                 qrencoder::qrencode_raster("http://rud.is/b"), 
                 maxpixels=.Machine$integer.max,col=c("white", "black")),
                 interpolate=FALSE)    
ggplot() + geom_blank() + annotation_custom(qrGrob,0,1,0,1) 
库(ggplot2)
图书馆(光栅)
库(QR编码器)
图书馆(网格)

qrGrob基于@SkyWalker,它对我有效

图书馆(GG2)

库(光栅)
库(QR编码器)
图书馆(网格)
setwd(“D:/WORK/R_Prj/OCR”)

QRtxt基于@SkyWalker,适合我

图书馆(GG2)

库(光栅)
库(QR编码器)
图书馆(网格)
setwd(“D:/WORK/R_Prj/OCR”)

谢谢你!但不幸的是,我得到了更新中显示的错误:
无法打开数据:image/png;base64
工作正常!谢谢非常感谢。但不幸的是,我得到了更新中显示的错误:
无法打开数据:image/png;base64
工作正常!谢谢查看
magick
软件包。它现在有了一个设备,您可以将ggplot对象渲染到该设备上,然后在其上合成内存中的png图像。@hrbrmstr感谢您的评论。我查看了
magick
包,但没有找到明显的方法来涵盖我的OP用例。那里有很多函数以图像作为参数,但只有一个函数是使用自己的API读取的。它现在有了一个设备,您可以将ggplot对象渲染到该设备上,然后在其上合成内存中的png图像。@hrbrmstr感谢您的评论。我查看了
magick
包,但没有找到明显的方法来涵盖我的OP用例。那里有很多函数以图像作为参数,但只有一个函数是使用自己的API读取的。
myImage <- png::readPNG(x)
myImage <- grid::rasterGrob(myImage, interpolate = TRUE)
library(ggplot2)
ggplot() + 
    geom_blank() + 
    annotation_custom(myImage, xmin = -Inf, xmax = Inf, ymin = -Inf, ymax = Inf)
library(ggplot2)
library(raster)
library(qrencoder)
library(grid)
qrGrob <- grid::rasterGrob(raster::as.raster(
                 qrencoder::qrencode_raster("http://rud.is/b"), 
                 maxpixels=.Machine$integer.max,col=c("white", "black")),
                 interpolate=FALSE)    
ggplot() + geom_blank() + annotation_custom(qrGrob,0,1,0,1) 
library(raster)
library(qrencoder)
library(grid)



setwd("D:/WORK/R_Prj/OCR")
QRtxt <- paste0("Qt",round(runif(10)*10))

QR.in.Batch <- function(x){
qrGrob <- grid::rasterGrob(raster::as.raster(
  qrencoder::qrencode_raster(x), 
  maxpixels=.Machine$integer.max,col=c("white", "black")),
  interpolate=FALSE)    
ggplot() + geom_blank() + annotation_custom(qrGrob,0,1,0,1) 
}

lapply(QRtxt, QR.in.Batch)