如何将内存中的 png 图像添加到绘图中?
How to add an in memory png image to a plot?
我有一个在内存中自动生成的 png 图像,而不是从磁盘加载它。我当然可以先将它保存到磁盘,但我不想这样做。我想在 ggplot2 图中的某处显示该图像,但找不到合适的 package/function 来执行此操作。
我记忆中的形象是
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)))
这可能有效:
- 从向量中读取图像
- 渲染图像
- 使用空白绘图
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)
我找不到任何从内存中加载 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)
基于@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)
我有一个在内存中自动生成的 png 图像,而不是从磁盘加载它。我当然可以先将它保存到磁盘,但我不想这样做。我想在 ggplot2 图中的某处显示该图像,但找不到合适的 package/function 来执行此操作。
我记忆中的形象是
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)))
这可能有效:
- 从向量中读取图像
- 渲染图像
- 使用空白绘图
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)
我找不到任何从内存中加载 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)
基于@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)