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")
尝试裁剪 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")