我正在使用plumber 1.0.0创建一个API GET,并希望使用动态分辨率呈现svg
读取我们看到的documentation,可能会以静态的方式改变分辨率。但我需要API使用解析参数调用此函数(以响应)。
我的最后一次尝试是创建svg文件并保存为临时文件,然后我想“读取”这个保存的svg文件,并将保存为svg的图形作为输出返回。
有人知道怎么做吗?
我用png尝试了同样的逻辑,并且工作了。
但是当我尝试加载svg文件时,无法正常工作...
谢谢!
发布于 2020-12-02 10:18:23
serializer_svg最终会调用grDevices::svg,它应该会告诉你设备上有哪些可用选项。通常情况下,它们是在解析时设置的,但您可以使用类似于这种丑陋的hack来动态覆盖它们。
我们确保通过使用将在设备打开之前执行的筛选器来设置请求值。
library(plumber)
device_size <- function() {
h_ <- 7
w_ <- 7
list(
h = function() h_,
w = function() w_,
set_h = function(h) if (!is.null(h)) {h_ <<- as.numeric(h)},
set_w = function(w) if (!is.null(w)) {w_ <<- as.numeric(w)}
)
}
output_size <- device_size()
serializer_dynamic_svg <- function(..., type = "image/svg+xml") {
serializer_device(
type = type,
dev_on = function(filename) {
grDevices::svg(filename,
width = output_size$w(),
height = output_size$h())
}
)
}
register_serializer("svg", serializer_dynamic_svg)
#* @filter dynamic_size
function(req) {
if (req$PATH_INFO == "/plot") {
output_size$set_w(req$args$width)
output_size$set_h(req$args$height)
}
plumber::forward()
}
#* @get /plot
#* @param width
#* @param height
#* @serializer svg
function() {
plot(iris)
}
https://stackoverflow.com/questions/65098103
复制相似问题