2017-10-17 10 views
0

J'ai une image png qui est générée automatiquement en mémoire par opposition au chargement depuis le disque. Je pourrais bien sûr l'enregistrer d'abord sur le disque mais je préférerais ne pas le faire. Je voudrais afficher cette image quelque part dans une intrigue ggplot2 mais je ne trouve pas le bon package/fonction pour le faire.Comment ajouter une image en mémoire png à un tracé?

L'image que j'ai en mémoire est par ex.

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

MISE À JOUR un de cas d'utilisation réaliste, et l'erreur que je reçois en essayant d'utiliser Réponse # 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== 

J'ai aussi essayé les erreurs suivantes mais je reçois différentes:

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

ou

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

Regardez le paquet 'magick'. il a maintenant un périphérique que vous pouvez rendre à l'objet ggplot, puis composer l'image png en mémoire sur le dessus. – hrbrmstr

+0

@hrbrmstr Merci pour votre commentaire. J'ai vérifié le paquet 'magick' mais je ne trouve aucun moyen évident de couvrir mon cas d'utilisation. Il y a beaucoup de fonctions qui prennent une image comme paramètre mais seulement une qui a été lue en utilisant leur propre API. –

Répondre

0

je pouvais pas trouvé moyen de charger le PNG de la mémoire. Cependant, cet autre moyen fonctionne parfaitement en utilisant la version raster:

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

Cela pourrait fonctionner:

  • Lire une image à partir d'un vecteur
  • rendu une image
  • terrain blanc et en utilisant ggplot2 geom

code:

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

Merci! mais malheureusement, je reçois l'erreur indiquée dans la mise à jour: 'impossible d'ouvrir les données: image/png; base64' –