2017-10-17 69 views
0

我有一個在內存中自動生成的PNG圖像,而不是從磁盤加載它。我當然可以先將它保存到磁盤上,但我寧願不這樣做。我想在ggplot2圖的某處顯示該圖像,但無法找到正確的包或函數來執行此操作。如何將內存中的png圖像添加到圖中?

我在記憶中的圖像是例如

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))) 
+0

看看'magick'包。它現在有一個設備,你可以渲染ggplot對象,然後在其上構建內存中的png圖像。 – hrbrmstr

+0

@hrbrmstr感謝您的評論。我檢查了'magick'包,但是我發現沒有明顯的方式來覆蓋我的OP使用案例。這裏有很多函數以圖像作爲參數,但只有一個已經使用自己的API讀取。 –

回答

0

我可以沒有找到任何方法從內存中加載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) 
2

這可能會實現:

  • 從矢量
  • 讀取圖像使用空白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) 
+0

謝謝!但不幸的是,我收到了更新中顯示的錯誤:'無法打開data:image/png; base64' –

相關問題