首页 文章

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

提问于
浏览
0

我有一个png图像,它在内存中自动生成,而不是从磁盘加载 . 我当然可以先将它保存到磁盘但我宁愿不这样做 . 我想在ggplot2图中的某处显示该图像,但找不到合适的包/函数来执行此操作 .

我在记忆中的图像是例如

x <- "data:image/png;base64,..."

UPDATE 一个真实的用例,以及我在尝试使用答案#1时得到的错误

library(qrencoder)
x <- qrencode_png("http://rud.is/b")
x
[1] "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAAAAACMfPpKAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAfElEQVQYlU2QWwrEMAwDR0vuf+XZj8qJSyjIyNYjAkAMQNFhkBCKzoNiin70kxKBN41ENuf7+9AZWQOGRx/2m4TeKy2YO0GyDpwszW5EUCs/ur78NZtGvSa8azdPDGttsonot8LtDFNnrs4yLSbuJk0ajnV3vevhCxUj4Q+R11n764g4WgAAAABJRU5ErkJggg=="
myImage <- png::readPNG(x)
  > Error in png::readPNG(x) : 
  > unable to open      
  > data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAAAAACMfPpKAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAfElEQVQYlU2QWwrEMAwDR0vuf+XZj8qJSyjIyNYjAkAMQNFhkBCKzoNiin70kxKBN41ENuf7+9AZWQOGRx/2m4TeKy2YO0GyDpwszW5EUCs/ur78NZtGvSa8azdPDGttsonot8LtDFNnrs4yLSbuJk0ajnV3vevhCxUj4Q+R11n764g4WgAAAABJRU5ErkJggg==

我也试过以下但是我得到了不同的错误:

qrGrob <- grid::gTree(children=gList(grid::rasterGrob(x)))

要么

qrGrob <- grid::gTree(children=gList(grid::rasterGrob(x)))

3 回答

  • 1

    这可能有效:

    • 从矢量中读取图像

    • 渲染图像

    • 使用空白 ggplot2 geom进行绘图

    码:

    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)
    
  • 3

    我找不到任何方法从内存加载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)
    
  • 1

    基于@SkyWalker,它适用于我 .

    库(GGPLOT2)

    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)
    

相关问题