R 中的方法在 svg 文件上裁剪空白

Method in R to crop whitespace on svg file

尝试裁剪 SVG 周围的白色space(在本例中为“透明 space”)。没有真正看到一个简单的方法来做到这一点。尝试了 knitr::plot_crop() 和 magick::image_trim() 但无济于事。这两种方法的输出都删除了 alpha 层并使其具有白色背景。

下面的 SVG 示例:https://freesvg.org/crossed-onions 并单击“下载”

原文:

编织方法:

knitr::plot_crop("~/Downloads/onions-pd.svg")

产生:

Imagemagick 版本:

library(magick)
img = image_read("~/Downloads/onions-pd.svg")
img = image_trim(img)
image_write(img,"~/Downloads/onions-pd.svg",format="svg")

产生:

听起来您想裁剪 svg 的 viewBox。可能有很多方法可以做到这一点,但一种是计算出新的 viewBox 坐标并将它们写入 svg 文件。

我们可以这样得到非透明部分的极限:

library(magick)

img <- image_read_svg("onions-pd.svg")
data   <- image_data(img) 
opaque <- which(data[4,,] != 0, arr.ind = TRUE)
limits <- paste(paste(apply(opaque, 2, min), collapse = ", "), 
                paste(apply(opaque, 2, max), collapse = ", "), sep = ", ")

limits
#> [1] "11, 64, 417, 440"

并将它们写入 svg 文件的副本,如下所示:

library(xml2)

onions_xml <- read_xml("onions-pd.svg")

xml_set_attr(onions_xml, attr = "viewBox", limits)

write_xml(onions_xml, "onions-cropped.svg")