首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Plumber R渲染svg文件

Plumber R渲染svg文件
EN

Stack Overflow用户
提问于 2020-12-02 04:35:05
回答 1查看 82关注 0票数 0

我正在使用plumber 1.0.0创建一个API GET,并希望使用动态分辨率呈现svg

读取我们看到的documentation,可能会以静态的方式改变分辨率。但我需要API使用解析参数调用此函数(以响应)。

我的最后一次尝试是创建svg文件并保存为临时文件,然后我想“读取”这个保存的svg文件,并将保存为svg的图形作为输出返回。

有人知道怎么做吗?

我用png尝试了同样的逻辑,并且工作了。

但是当我尝试加载svg文件时,无法正常工作...

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-02 10:18:23

serializer_svg最终会调用grDevices::svg,它应该会告诉你设备上有哪些可用选项。通常情况下,它们是在解析时设置的,但您可以使用类似于这种丑陋的hack来动态覆盖它们。

我们确保通过使用将在设备打开之前执行的筛选器来设置请求值。

代码语言:javascript
运行
复制
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)
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65098103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档